Une application mobile doit couramment effectuer des actions en tâche de fond : suivi de position, action à la détection d'une balise beacon, vérification d'emails, récupération de données par consommation de webservices...


Pour cela le WLangage propose deux méthodes : les tâches en arrière-plan et les threads persistants.


La différence majeure entre ces deux solutions, c'est le besoin ou non d'avoir l'application en cours d'exécution.


Lorsqu'une application va lancer une procédure dans un thread persistant, il est exécuté dans le contexte d'un service dit "foreground" de Android. Ce contexte particulier permet d'indiquer au système que l'application :

  • est active même lorsqu'elle est en arrière-plan,
  • ne doit pas être arrêtée.


A l'inverse lorsque l'application ajoute une tâche en arrière-plan avec la fonction TâcheEnArrièrePlanAjoute, son exécution sera à la charge du système et indépendant du cycle de vie de l'application. L'application peut donc être arrêtée, le système peut même être redémarré, la tâche en arrière-plan sera toujours exécutée. Entre les appels, il n'y a aucune consommation de batterie ou de CPU. Si l'application est arrêtée au moment d'exécuter la tâche, elle est relancée et ses traitements d'initialisation sont exécutés afin de permettre à la tâche d'avoir accès par exemple aux variables globales.


Les tâches en arrière-plan doivent donc être utilisées en cas de traitements longs et récurrents, et qui n'ont pas besoin de l'application. Ils pourront la redémarrer si nécessaire, par exemple pour notifier de l'arrivée d'un email, d'une données obtenues d'un webservice...


Les threads persistants seront utilisés pour effectuer des traitements également longs mais ponctuels avec l'application lancée. Par exemple, le suivi précis de la position GPS de l'appareil pendant un temps donné. Typiquement, une application de suivi d'une activité sportive telle que WM Sport inclus avec WINDEV Mobile utilise un thread persistant.

 

Rappel spécifique pour Android 10 et ultérieur : l'ouverture d'une fenêtre depuis une action faite en arrière-plan n'est plus autorisée : Exécution en arrière-plan, notifications push, beacon, suivi de position, les changements à connaître pour le déploiement d'applications sous Android 10...

 

== Mise à jour 15/9/2021 ==

A partir de sa version 10 Android intègre un mécanisme d'optimisation de la batterie. Cette fonctionnalité peut interrompre toute application et donc ses traitements en arrière plan afin d'augmenter l'autonomie de l'appareil. Si une application doit conserver un thread persistant, il est donc nécessaire de demander à son utilisateur d'autoriser l'application à ne pas être prise en compte par ce mécanisme d'optimisation. Le code suivant utilisant SysOptimBatterieArrierePlan peut être utilisé :

 

 

SI PAS EnModeSimulateurAndroid() ALORS
SI PAS SysOptimBatterieArrièrePlan() = sobNonOptimisée ALORS
Info("Les optimisations de batterie sont actives pour l'application", ...
"Pour utiliser cette fonctionnalité, veuillez autoriser la désactivation des optimisations...")
SysOptimBatterieArrièrePlan(sobDemandeDésactivation)
FIN
FIN

 

Après l'affichage du message de l'application, la fenêtre de confirmation de Android sera ouverte :

En contrepartie, Android affichera de temps à autre une alerte à l'utilisateur pour lui rappeler que l'application consomme de la batterie. Tant que l'autorisation est conservée, l'application aura la possibilité d'exécuter un traitement en arrière-plan sans être interrompu ... tant qu'il reste de la batterie !

 

Cas particuliers :

Certains fabricants ajoutent un réglage propriétaire pour la consommation de l'énergie :

  • pour les appareils Huawei : il faut mettre le "lancement automatique" de l'application en manuel :
    • paramètres du téléphone,
    • Menu "Batterie",
    • puis "Lancement de l'application",
    • puis sélectionner l'application,
    • l'option "Gérée automatiquement " doit être décochée au profit de "Gérer manuellement",
    • les 3 sous-options suivantes doivent être cochées :
      • "Lancement automatique",
      • "Lancement secondaire",
      • "Exécution en arrière plan".
  • Pour les appareils Xiaomi : il faut activer le "Démarrage automatique" :
    • dans l'application de sécurité Xiaomi,
    • dans "Autorisations",
    • puis "Démarrage automatique",
    • activer le "Démarrage automatique" pour cette application.

 

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée