[JAVA] Programmation à partir de 51 ans Remarque: Restrictions d'exécution en arrière-plan OverView [Shakyo]

https://developer.android.com/about/versions/oreo/background?hl=ja

[Shakyo]: Pour moi

Limite d'arrière-plan

Afin d'éviter un arrêt inattendu de l'application en raison de la charge du système, etc., l'opération d'exécution de l'application est limitée lorsque l'application n'est pas directement exploitée. Il y a deux façons de le limiter.

Restrictions du service en arrière-plan

--Restriction des services d'arrière-plan lorsque l'application est inactive

Limite de diffusion

Des restrictions sont imposées sur Android 7.0 (API 24) ou version ultérieure, et les restrictions sont renforcées sur Android 8.0 (API 26).

À quelques exceptions près

Limites et niveaux d'API

Remarque:
Par défaut, ces restrictions s'appliquent uniquement aux applications qui ciblent Android 8.0 (API 26) ou version ultérieure.
Cependant, les utilisateurs peuvent activer la plupart de ces restrictions sur leurs applications sur l'écran Paramètres, même si l'application cible moins que l'API 26. (Contraindre assurera la qualité de l'expérience utilisateur)

Dans de nombreux cas, l'application peut contourner la limitation avec JobScheduler </ font>.

JobScheduler </ font> vous permet d'agir lorsque votre application est inactive, mais vous pouvez également la planifier pour qu'elle n'affecte pas l'expérience utilisateur.

Android 8.0 ajoute quelques améliorations à JobScheduler </ font> qui facilitent le remplacement des services et des récepteurs de diffusion par des tâches planifiées. Pour plus d'informations, consultez Améliorations de JobScheduler.

JobScheduler: </ strong>
Un service de planification qui gère les tâches afin que divers processus puissent être exécutés efficacement. </ font>

Limites du service en arrière-plan

Lorsqu'il est considéré au premier plan

--Il y a une activité visible (peut avoir été mise en pause) --Utiliser le service de premier plan

  • L'application est connectée à une autre application au premier plan et est liée à l'un des services de l'application au premier plan
  • L'application est connectée à une autre application de premier plan et utilise le fournisseur de contenu de l'application de premier plan
    = Exemple de liaison d'autres applications de premier plan =
  • IME
  • Wallpaper service
  • Notification listener
  • Voice or text service

Dans tout autre état, l'application est considérée comme un traitement en arrière-plan.

Note:
Les règles ci-dessus ne s'appliquent pas aux services liés. Si vous avez défini un service lié dans votre application, vous pouvez lier un autre composant à ce service, que votre application soit au premier plan ou non.

Arrêt du système des applications en arrière-plan

Vous êtes libre de générer et d'exécuter des services de premier plan et d'arrière-plan pendant que votre application s'exécute au premier plan. Lorsque l'application passe en arrière-plan, elle peut se permettre de générer et d'exécuter des services pendant seulement quelques minutes, après quoi le système détermine que l'application est inactive et Service.stopSelf. Arrêtez le service d'arrière-plan de l'application, comme lorsque vous utilisez la méthode () </ font>.

Ajouter à la liste blanche des applications

La condition pour que l'application soit ajoutée à la liste blanche est lorsque l'utilisateur effectue le traitement visible suivant.

Dans certaines conditions, les applications d'arrière-plan sont placées sur une liste blanche temporaire, libres de lancer des services pendant quelques minutes et autorisées à s'exécuter.

  • Traitement des messages Firebase Cloud Messageing (FCM) </ font> haute priorité --Recevoir des diffusions (SMS / MMS, etc.) --Exécuter PendingIntent à partir de la notification
  • Démarrer VpnService avant l'application VPN favorise la confiance au premier plan

IntentService / JobIntentService et Android 8.0 ou version ultérieure

Lors de la gestion des services d'arrière-plan dans IntentService

Note:
Puisque IntentService est un service, il est soumis à de nouvelles restrictions sur les services d'arrière-plan. Par conséquent, les applications qui dépendent d'IntentService ne fonctionneront pas correctement sur Android 8.0 ou version ultérieure.

Pour cette raison, Android Support Library 26.0.0 introduit une nouvelle classe JobIntentService. Cette classe fournit les mêmes fonctionnalités que IntentService , mais utilise des tâches au lieu de services lorsqu'elle est exécutée sous Android 8.0 et supérieur.

JobScheduler Dans de nombreux cas, les applications remplaceront les services d'arrière-plan par des tâches JobScheduler </ font> (comme lors de la migration vers Android 8.0: API 26 ou version ultérieure). Les travaux planifiés sont lancés régulièrement, interrogeant le serveur et se terminant.

Génération de services en arrière-plan autour d'Android 8.0

Dans Android 8.0 et versions antérieures, la façon de créer un service d'arrière-plan consiste à créer un service d'arrière-plan, puis à promouvoir ce service au premier plan.

À partir d'Android 8.0, le système ne permet plus aux applications d'arrière-plan de créer des services d'arrière-plan. Au lieu de cela, une méthode startForegroundService () </ font> a été introduite, utilisée pour démarrer un nouveau service au premier plan.

Après avoir exécuté startForegroundService () </ font>, startForeground () </ font> </ strong> sera appelé dans les 5 secondes. Afficher les notifications des utilisateurs des nouveaux services. Si l'application n'appelle pas startForeground () </ font> dans le délai imparti, le système arrêtera le service et l'application sera ANR (l'application ne répond pas).

Restrictions de diffusion omises

Migration

Découvrez comment appliquer des limites d'arrière-plan pour moins que l'API 26. La définition de limites d'arrière-plan permet de maintenir la qualité de l'expérience utilisateur.

Même si l'API est inférieure à 26, vous pouvez activer les restrictions pour l'application sur l'écran ** [paramètres] **. Nouveau Vous devrez peut-être mettre à jour votre application pour vous conformer aux restrictions.

Si vous devez remplacer

  • Dépend du traitement des services d'arrière-plan lorsque l'application est inactive --Déclarer un récepteur pour les diffusions implicites dans le manifeste

Si une application est inactive et qu'elle repose sur le traitement des services d'arrière-plan, elle devra remplacer ces services.

** **

--Si l'application est en arrière-plan et que vous souhaitez créer un service de premier plan
méthode startForegroundService </ font>, startService () </ font> Utiliser au lieu de pour générer des services de premier plan

  • Le service affiché à l'utilisateur doit être un service de premier plan.
    Utilisez la méthode startForegroundService </ font> au lieu de startService () </ font>. Utiliser pour générer un service de premier plan

--Fonctionnalité de service en double à l'aide de travaux planifiés
En règle générale, utilisez les travaux planifiés comme alternative aux services qui ne s'exécutent pas dans une situation reconnaissable par l'utilisateur.

  • </ font> Utilisez FCM pour lancer sélectivement des applications lorsque des événements réseau se produisent sans interrogation en arrière-plan
    Sondage: interrogez d'autres systèmes à intervalles réguliers </ font>

  • Maintenez l'opération en arrière-plan jusqu'à ce que l'application devienne naturellement au premier plan


Vérifiez le récepteur de diffusion défini dans le manifeste de l'application. Si le manifeste déclare un récepteur pour les diffusions implicites, vous devez le remplacer. Les solutions possibles sont:

** **

--Au lieu de déclarer le récepteur dans le manifeste, appelez Context.registerReceiver () </ font> pour créer le récepteur lors de l'exécution

--Utilisez un travail planifié pour voir les conditions qui ont déclenché une diffusion implicite

Recommended Posts