Les bitmaps sont souvent les objets qui consomment le plus de 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 images. L'optimisation de l'utilisation de la mémoire bitmap améliore considérablement la réactivité de l'interface utilisateur, 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 à un manque de mémoire.
Identifier une utilisation élevée de la mémoire bitmap
Android Vitals fournit des métriques sur l'espace mémoire bitmap utilisé par 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 de l'efficacité de la mémoire sur différents types et versions d'appareils.
Android Vitals partage 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 nettement plus élevé au premier plan que dans d'autres états de processus. Toutefois, les développeurs doivent examiner si le ratio P99/P50 est significatif (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 l'augmentation générale des éléments gonfle 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 distribution (P99). Assurez-vous que les allocations de bitmaps au premier plan ne persistent pas inutilement après la transition de l'application vers 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 d'allocations de bitmaps de premier plan lourdes lors de la transition vers ces états. Étant donné que ces services sont conçus pour des tâches de longue durée, la conservation d'éléments volumineux dégrade l'expérience utilisateur globale et force le daemon 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é placée en arrière-plan, mais n'est pas encore mise en cache. Comme cet état de processus est moins important que les processus de premier plan ou perceptibles, les applications doivent explicitement libérer les éléments bitmap volumineux ici pour réduire la pression sur la mémoire.
- En cache : l'application est dans un état de mise en cache. Cet état est très sensible à la sollicitation de la mémoire système, comme les LMK. Les applications doivent réduire de manière proactive l'utilisation de la mémoire bitmap dans cet état pour éviter d'être supprimées 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.