2017-09-13 3 views
0

J'ai surveillé la consommation de mémoire dans mon application Android et j'ai remarqué un phénomène intéressant. Lors du chargement d'un bitmap (un fichier PNG, 380x10640), j'ai observé la quantité de mémoire disponible après avoir exécuté le code de chargement du bitmap diminué de 15 Mo sur certains appareils (par exemple, Modecom FreeTab 9004, API 17) et jusqu'à 60 MB sur l'autre (à savoir, Nexus4 API 25). Quelqu'un pourrait-il m'expliquer la raison pour laquelle cela se produit?BitmapFactory et différentes valeurs concernant la consommation de mémoire

J'ai utilisé Runtime.getRuntime().freeMemory() pour surveiller le tas et les commandes suivantes pour charger le bitmap.

Resources r = getResources(); 

private Bitmap imageOne; 

// ... 

imageOne = BitmapFactory.decodeResource(r, R.drawable.bitmap_1); 

Répondre

0

La différence dans la consommation de mémoire doit être due à la configuration Bitmap différente par défaut du périphérique.
Par exemple, si la valeur par défaut est RGBA_F16, chaque pixel prend 8 octets, ARGB_8888 - 4 octets. Donc, si vous calculez:

380 * 10640 = 4043200 pixels * 8 bytes = 32345600 byte ~32 mb. 

En ce qui concerne 60 Mo au lieu de 32 - l'image peut être mis en mémoire cache, mémoire tampon, ou que vous chargez accidentaly deux fois.

Vous pouvez charger l'image manuellement. De cette façon, vous pouvez sélectionner la configuration pour cela.

Update1: ou 60 mb vs 15 mb pourrait être causée par l'image pré-mise à l'échelle pour les différents DPI