mobile-best-practice/chapters/MBP_007_fr.md

2.6 KiB

Mettre en pause les traitements consommateurs lorsque l'application est en arrière-plan

Identifiants

// TODO

Catégories

Cycle de vie Tiers Responsable
2. Conception Utilisateur/Terminal Developpeur/Développeuse

Indications

Degré de priorité Mise en oeuvre Impact écologique
3 4 3
Ressources Economisées
Mémoire / Batterie

Description

Lorsqu'une personne navigue entre plusieurs applications sur son mobile, les applications basculent entre premier plan et arrière-plan. Lorsqu'une application qui effectue un traitement consommateur en mémoire passe en arrière-plan, il convient de s'appuyer sur son cycle de vie pour réduire l'impact de ce traitement sur la batterie du téléphone.

  • Dans la fonction onPause, l'activité est toujours visible à l'écran, mais l'utilisateur ne peut plus interagir avec.
  • Dans la fonction onStop, l'activité n'est plus visible.

Au sein de ses deux callbacks, une bonne pratique est de libérer ou d'ajuster les ressources consommatrices initialisées précédemment.

Quelques exemples de traitements consommateurs :

  • L'affichage d'une animation.
  • La lecture d'une vidéo ou d'un son.
  • L'usage des capteurs du téléphone : le GPS, le gyroscope.
  • L'usage de protocol de connectivité : Bluetooth, Wifi, NFC, etc.

Exemple

  • Soit une application utilisant la position GPS du téléphone. Lorsque l'activité n'est plus visible, il faut désactiver la mise à jour de la position dans la fonction onStop. Si cela n'est pas possible, une alternative est de changer la granularité de mise à jour de la position de "fine" à "grossière".
  • Soit une activité PhotoActivity qui utilise l'appareil photo. Lorsqu'une autre activité prend le focus sur celle-ci par exemple sous forme de modale, mais que la première activité restent visible dessous (elle est donc dans l'état PAUSED), il faut appeler la fonction camera?.release() dans la callback onPause.

Principe de validation

Le nombre ... est inférieur ou égal à
de traitements lourds pour lesquels la mémoire n'est pas libérée dans les fonctions onPause ou onStop 0