Utilisation de la mémoire d'image de fond Android


Answers

Question

Le projet sur lequel je travaille utilise plusieurs fonds de "haute résolution" (notez les citations). Juste pour se mettre en situation, l'un d'entre eux est un fichier PNG 640x935 1.19M. Pour autant que je sache, même si Android décompresse les images dans la mémoire en tant que données brutes, cela devrait être:

640 x 935 x 4 octets = 2.39M

J'ai des problèmes de mémoire sur mon projet que je ne comprends pas vraiment et j'espère que quelqu'un pourra faire la lumière sur ce sujet. Je vais nommer deux appareils que je développe et certains des résultats.

Pour m'assurer qu'il ne s'agissait pas d'un problème secondaire, j'ai fait une activité sans charger l'arrière-plan lors de sa création et ensuite, lorsque l'utilisateur appuie sur un bouton, tout ce qu'il fait est:

findViewById(R.id.completed_block_background).setBackgroundResource(R.drawable.blockbackgroundbottom1);

Ensuite, en utilisant DDMS avec "Update Heap" sur le processus (et d'abord forcer GC à s'assurer que ce ne sera pas un problème), j'obtiens les résultats de mémoire suivants:

Nexus S: De 18M à 26M (différence de 8M)

Galaxy Nexus: allant de 28M à 39M (différence de 11M)

Donc, comme vous pouvez le voir, mettre cette image non compressée de 2.39M en arrière-plan augmente en fait 8M et 11M dans l'utilisation de la mémoire. Quelqu'un peut-il expliquer pourquoi est-ce et s'il y a une solution?

La seule solution que j'ai pu trouver est d'utiliser des bitmaps pour réduire la résolution de moitié ou baisser le format de canal (jusqu'ici c'est ce que j'ai fait, les a changé en 565 RVB, mais cela pose des problèmes de bande que je ne peux pas accepter).

J'accepterais également, au cas où il n'y aurait rien à faire, une explication de la raison pour laquelle cela se produit. Merci d'avance.






Links