Sobes.tech
Intern

Quelle est la différence entre un service en arrière-plan et un service en arrière-plan dans Android?

sobes.tech IA

Réponse de l'IA

La différence entre un service en arrière-plan normal et un service en arrière-plan limité (restricted) est apparue avec Android 8.0 (API 26).

Service en arrière-plan normal :

  • Peut fonctionner indéfiniment en arrière-plan.
  • Le système peut le terminer en cas de manque de ressources, mais il peut être relancé si START_STICKY est renvoyé dans onStartCommand().
  • Ne nécessite pas de notifications visibles pour l'utilisateur (bien que ce ne soit pas la meilleure pratique du point de vue UX).
  • Peut consommer des ressources importantes en batterie et CPU.

Service en arrière-plan limité (restrictions appliquées) :

  • Un service lancé en arrière-plan sans activités visibles ou autres "listes blanches" (conditions privilégiées) fait face à des restrictions sur l'utilisation des ressources.
  • Les principales restrictions incluent :
    • Restriction sur l'exécution en arrière-plan : Le système peut arrêter le service en peu de temps (généralement quelques minutes) après que l'application passe en arrière-plan.
    • Interdiction de lancer de nouveaux services en arrière-plan : L'application en arrière-plan ne peut pas lancer de nouveaux services en arrière-plan avec startService(). À la place, il faut utiliser JobScheduler ou WorkManager.
    • Restriction sur la réception de messages broadcast : Les messages broadcast implicites dans le manifeste seront ignorés. L'application doit enregistrer explicitement des récepteurs broadcast ou utiliser JobScheduler/WorkManager pour gérer les événements.
  • L'objectif de ces restrictions est d'améliorer la durée de vie de la batterie et la performance de l'appareil, en limitant l'utilisation irrationnelle des ressources par les applications en arrière-plan.

Comment un service devient non limité (actif aux yeux du système) :

  • L'application est au premier plan (l'utilisateur interagit activement avec elle).
  • L'application démarre un service visible (foreground service), qui affiche une notification constante à l'utilisateur.
  • L'application effectue des tâches spécifiques (par exemple, traitement de messages broadcast, exécution de tâches JobScheduler) qui la sortent temporairement de l'état de travail en arrière-plan irrationnel complet.

Différence principale : Avec Android 8.0 et versions supérieures, un service fonctionnant en arrière-plan sans activité visible de l'utilisateur ou service visible sera limité par le système en termes d'accès aux ressources et de capacité à fonctionner longtemps. Le "service en arrière-plan" normal avant Android 8.0 pouvait fonctionner sans ces restrictions strictes.