Chaque fois qu’une app s’exécute en arrière-plan, elle consomme une partie des ressources limitées de l’appareil, comme la RAM. L’expérience utilisateur peut s’en trouver altérée, surtout si l’utilisateur utilise une app gourmande en ressources, comme un jeu ou une vidéo. Pour améliorer l’expérience utilisateur, Android 8.0 (niveau 26 de l’API) impose des limites à ce que les applications peuvent faire lorsqu’elles fonctionnent en arrière-plan. Ce document décrit les changements apportés au système d’exploitation et la façon dont vous pouvez mettre à jour votre application pour qu’elle fonctionne bien dans le cadre de ces nouvelles limitations.

Qu’est-ce que le service dans android?

Rafraîchissons d’abord ce qu’est le service dans android ? Selon la documentation android:

Un Service est un composant d’application qui peut effectuer des opérations de longue durée en arrière-plan, et il ne fournit pas d’interface utilisateur.

Donc, fondamentalement, le service est la même chose que l’activité mais il n’a pas le composant UI en lui. Donc, il n’a pas besoin d’exécuter une animation lisse à 60 fps. C’est pourquoi il peut exécuter n’importe quelle tâche pendant la période de temps plus longue que l’activité.

Il existe trois types de service :

  • Service démarré – Un service est démarré lorsqu’un composant d’application (comme une activité) appelle startService().
  • Service lié – Un service est lié lorsqu’un composant d’application se lie à lui en appelant bindService().
  • Service planifié – Un service est planifié lorsqu’une API telle que la JobScheduler.

Applications d’arrière-plan vs d’avant-plan:

Pour apprendre les changements d’exécution d’arrière-plan, nous devons d’abord connaître la différence entre application d’arrière-plan et d’avant-plan.

Règle de base, votre application sera considérée comme un service d’avant-plan si l’un des trois cas ci-dessous est vrai :

  1. Votre application a une activité actuellement visible.
  2. Votre application a un service d’avant-plan en cours d’exécution.
  3. Votre application est connectée à une autre application d’avant-plan en liant le service ou en consommant leurs fournisseurs de contenu.

Si l’un des scénarios ci-dessus n’est pas vrai dans l’instance actuelle, votre application est considérée comme étant en arrière-plan.

Pourquoi devons-nous restreindre l’utilisation des services d’arrière-plan ?

Parfois que vos applications s’exécutent en arrière-plan en utilisant des services, votre application consomme deux ressources précieuses : 1) la mémoire et 2) la batterie.

Ces deux ressources sont limitées sur les appareils mobiles et la plupart des appareils de bas à moyen de gamme n’ont pas beaucoup de mémoire ou de batterie à l’intérieur.

Supposons que votre application effectue des tâches très intensives en arrière-plan et utilise la plus grande quantité de RAM pour effectuer cette tâche, alors cela créera l’expérience utilisateur très junky, surtout si l’utilisateur utilise une autre application gourmande en ressources, comme jouer à un jeu ou regarder une vidéo au premier plan.

Selon la documentation du service démarré, la meilleure pratique est,

Lorsque l’opération est terminée, le service doit s’arrêter de lui-même.

Mais, de nombreuses applications ont des services d’arrière-plan qui tournent longtemps, qui tournent essentiellement pendant un temps infini pour soit maintenir la connexion de socket avec le serveur, soit surveiller certaines tâches ou l’activité de l’utilisateur. Ces services créent un drain de batterie et aussi ils consomment constamment de la mémoire.

Depuis les deux dernières versions d’android (à partir de Marshmallow), Google essaie très fort d’augmenter la durée de vie de la batterie et de réduire la consommation de mémoire utilisée par les applications en introduisant le mode doze et app standby en retardant l’exécution en arrière-plan d’une certaine quantité de temps si le téléphone est inactif.

Mais la plupart du temps, malgré la connaissance des inconvénients des services à longue durée d’exécution, les développeurs les utilisent encore. (Principalement parce que c’est facile à mettre en œuvre et à maintenir plutôt que d’utiliser d’autres solutions de contournement.)