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.

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.

Ressources

Analyser les bitmaps dans Android Studio

Profilage Android Studio pour les bitmaps

Utilisez le Profileur de mémoire pour inspecter les allocations de mémoire en temps réel, capturer les empreintes de la mémoire et analyser les objets pour détecter les fuites de mémoire. Utilisez également l'analyseur de tas de mémoire pour détecter les fuites de mémoire, identifier les allocations de bitmap en double et visualiser la rétention d'objets.

Détection automatisée des fuites avec LeakCanary

Intégrez la bibliothèque LeakCanary pour automatiser la détection des fuites de mémoire dans votre application. LeakCanary fournit une analyse automatique du tas, en identifiant les objets qui auraient dû être collectés par le garbage collector, mais qui sont toujours conservés en mémoire, comme les bitmaps conservés par les composants détruits.

Documentation sur les performances des bitmaps

Ces ressources fournissent des conseils complets sur les bonnes pratiques pour une gestion efficace des bitmaps dans différents composants Android.

Checklist du développeur pour optimiser l'utilisation de la mémoire bitmap

Pour optimiser l'efficacité de la mémoire bitmap, suivez les trois principes de base : réduire, réutiliser et recycler.

  • Réduire : réduisez l'espace mémoire utilisé initial lors du chargement ou de l'affichage des bitmaps.
  • Réutilisation : implémentez des mécanismes de mise en cache pour éviter les allocations de bitmap redondantes.
  • Recycle : libère de manière proactive les ressources pour permettre la réallocation de mémoire aux processus actifs.

La checklist de développeur suivante peut vous aider à optimiser l'utilisation de la mémoire bitmap.

Principe fondamental Région Description
Réduire Éliminer les bitmaps en double Analysez les empreintes de la mémoire à l'aide du Profileur de mémoire pour détecter les allocations de bitmaps redondantes. Consultez le guide Gérer la mémoire bitmap.
Exploiter les bibliothèques de chargement d'images Utilisez des bibliothèques comme Glide et Coil pour automatiser le threading, la mise en cache et le décodage efficace.
Implémenter le sous-échantillonnage Décodez les images pour qu'elles correspondent aux dimensions du conteneur d'UI cible au lieu de charger des composants en pleine résolution.
Utiliser RGB_565 pour les images opaques Réduisez l'espace mémoire utilisé de 50% en passant de ARGB_8888 à une configuration 16 bits pour les images sans transparence.
Prioriser les VectorDrawables Utilisez des vecteurs pour les icônes et les graphiques de base afin de garantir une mise à l'échelle nette avec une surcharge de mémoire minimale.
Optimiser la diffusion d'images côté serveur Configurez les API de backend pour diffuser des images adaptées à la densité de l'appareil et aux dimensions du conteneur d'UI.
Éliminer les marges transparentes Évitez d'allouer de la mémoire pour les pixels "invisibles" en utilisant InsetDrawable ou une marge intérieure de mise en page au lieu de marges intégrées. Consultez Concevoir des applications Android performantes en termes de mémoire.
Réutiliser Configurer les tailles de cache optimales Adaptez les limites du cache mémoire et du cache du disque en fonction de la RAM et de la résolution d'écran de l'appareil. Consultez Mise en cache des bitmaps.
Recycler Supprimer définitivement des ressources en arrière-plan Implémentez TRIM_MEMORY_BACKGROUND pour vider les caches et améliorer la survie des processus en cas de pression sur la mémoire système.
Libérer les éléments de lancement lorsque l'UI est masquée Utilisez TRIM_MEMORY_UI_HIDDEN pour libérer les caches bitmap lorsque l'application n'est plus visible par l'utilisateur.
Surveiller les fuites de mémoire Utilisez LeakCanary et le Profileur de mémoire pour trouver les bitmaps conservés après la destruction de leur LifecycleOwner. Consultez Gérer la mémoire de votre application.