2017-04-24 3 views
1

J'ai un écran où je dois montrer deux images similaires à l'écran. La taille de ces deux images est dynamique mais elles couvrent la plus grande partie de l'écran. Lorsque je navigue vers cet écran dans mon application, je vois un pic de 12 Mo dans Memory Monitor dans AndroidStudio, ce qui signifie que ces images utilisent 12 Mo car il n'y a pas d'autre élément sur cet écran et que ces deux images sont similaires. de l'espace d'écran, je suppose que chacun consomme 6 Mo de mémoire lorsqu'il est montré. Les dimensions de ces deux images sont de 1174 x 1174 pixels et la taille est de 396 Ko dans le répertoire res.Comment réduire l'utilisation de la mémoire de l'image dans Android

J'ai essayé d'utiliser Glide mais je vois le même pic de mémoire lorsque ces images sont également chargées dans Glide. Même Glide ne peut pas aider si l'application essaie de prendre plus de mémoire que disponible et il y a une utilisation intensive des images dans d'autres parties de mon application. Donc, il y a toujours de la mémoire crunch et je reçois beaucoup d'exceptions OutOfMemory dans l'application où ces deux images sont affichées.

Donc, ma question est comment puis-je réduire l'utilisation de la mémoire de ces images? Aussi, pourquoi l'image prend 6 Mo de mémoire quand sa taille est de 396 Ko dans le dossier res?

Répondre

2

Je suppose que vous n'avez pas compressé vos images, utilisez https://github.com/zetbaitsu/Compressor très bien à la compression d'image. Aussi, je devine aussi que vous avez utilisé les stratégies de mise en cache de Glide.

Cependant, Glide met en cache l'image originale en pleine résolution et des versions en plus petite taille de cette image. Par exemple, si vous demandez une image de 1000 x 1000 pixels et que votre ImageView a une taille de 500 x 500 pixels, Glide mettra les deux versions de l'image dans le cache.

  1. DiskCacheStrategy.NONE met en cache rien, comme discuté
  2. caches DiskCacheStrategy.SOURCE que l'image originale pleine résolution. Dans notre exemple ci-dessus qui serait le pixel 1000x1000 un
  3. caches DiskCacheStrategy.RESULT que l'image finale, après avoir réduit la résolution (et éventuellement des transformations) (comportement par défaut)
  4. DiskCacheStrategy.ALL met en cache toutes les versions de l'image

pour répondre à votre réponse, vous devez garder une trace de manuellement le volume de cache dans android.Try forcer une collecte des ordures, normalement, les machines virtuelles effectuer la collecte des ordures que lorsqu'elles sont absolument nécessaires, car il est cher. Cependant, il peut être utile de forcer la récupération de place dans certaines circonstances. Par exemple, lorsque vous recherchez des fuites de mémoire, si vous souhaitez déterminer si un objet volumineux a déjà été publié avec succès, vous pouvez lancer le nettoyage de la mémoire beaucoup plus agressivement que d'habitude.

Espérons que cela vous a été utile.

+0

essayez ces fichiers – Remario

+0

Essayez la bibliothèque ci-dessus, essayez également la mise en cache pour la stratégie de disque et suivez vos changements – Remario

+0

également si vos images sont des graphiques réseau portables (PNG) ou jpeg utilisez d'abord TInyPng pour appliquer la compression . – Remario