Utilisation de mémoire bitmap

Les bitmaps sont souvent les objets les plus gourmands en mémoire dans une application. Les opérations de décodage et de mise à l'échelle se trouvent fréquemment sur le chemin critique du rendu des frames. L'optimisation de l'utilisation de la mémoire bitmap améliore considérablement la réactivité de l'UI, l'autonomie de la batterie et la stabilité globale en réduisant les à-coups, les erreurs ANR et les arrêts de processus liés aux erreurs OOM.

Identifier une utilisation élevée de la mémoire bitmap

Android Vitals fournit des métriques sur l'espace mémoire utilisé par les bitmaps d'une application en agrégeant les données des appareils Android. Par défaut, ces métriques sont calculées sous forme de récapitulatif des données quotidiennes sur 28 jours. Ces données permettent d'identifier les tendances et les régressions potentielles en termes d'efficacité de la mémoire sur différents types et versions d'appareils.

Android Vitals indique l'utilisation de la mémoire bitmap de votre application, répartie selon les états de processus suivants :

  • Premier plan : le processus de l'application est visible. Il est normal que le P99 soit beaucoup plus élevé au premier plan que dans les autres états de processus, mais les développeurs doivent examiner si le ratio P99/P50 est important (par exemple, supérieur à 3,5x), car cela indique souvent une fuite de mémoire bitmap. Pour l'identifier, recherchez une divergence entre l'utilisation typique (P50) et l'utilisation aberrante (P99). Alors que le gonflement général des ressources augmente la mémoire de manière uniforme sur tous les centiles, les fuites de mémoire s'accumulent au fil du temps, ce qui fausse fortement les données de fin de queue (P99). Assurez-vous que les allocations de bitmaps au premier plan ne persistent pas inutilement après que l'application est passée à d'autres états.
  • Services perçus par l'utilisateur : le processus de l'application s'exécute dans un état perceptible. Cela inclut les services de premier plan, les tâches accélérées et les tâches de transfert de données déclenchées par l'utilisateur. Les applications ne doivent pas conserver les allocations bitmap de premier plan importantes lors du passage à ces états. Étant donné que ces services sont conçus pour les tâches de longue durée, la conservation de ressources volumineuses dégrade l'expérience utilisateur globale et force le démon Low Memory Killer (LMKD) à récupérer de la mémoire en mettant fin aux processus de priorité inférieure.
  • Arrière-plan : l'application exécute un service d'arrière-plan ou a récemment été mise en arrière-plan, mais n'est pas encore mise en cache. Étant donné que cet état de processus est moins important que les processus de premier plan ou perceptibles, les applications doivent libérer explicitement les grands éléments bitmap ici pour réduire la pression sur la mémoire.
  • En cache : l'application est en cache. Cet état est très sensible à la pression exercée sur la mémoire système, comme les arrêts pour cause de mémoire insuffisante. Dans cet état, les applications doivent réduire de manière proactive l'utilisation de la mémoire bitmap pour éviter l'éviction par l'OS.

Facteurs contribuant à une utilisation élevée de la mémoire bitmap

La mémoire virtuelle qui n'a jamais été utilisée peut également être incluse dans le calcul. Si vous constatez une utilisation de la mémoire bitmap anormalement élevée, vérifiez que vous n'allouez pas de mémoire inutilisée.