2013-08-02 2 views
0

Comment calcule-t-on la taille de bitmap? Ma compréhension est qu'il devrait soutenir trois écrans complets de la présentation Google I/O sur Volley. Est-ce que quelqu'un sait comment je peux calculer la taille de la mémoire pour trois écrans complets sur un appareil Android donné? Je pense que cela faisait référence à la mise en cache inmemory donc un bitmapCache mais pas sûr.BitmapLruCache for Volley Calcul de la taille du cache?

Maintenant, j'ai vu le calcul suivant suggéré, mais je ne sais pas si cela est cohérent avec la conservation de trois écrans de données en mémoire cache.

final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024); 
final int cacheSize = maxMemory/8; 

MISE À JOUR: Quelle est la logique d'utilisation de 1/8e de la mémoire totale pour le cache. En quoi cela se compare-t-il à la conservation de trois écrans de données?

Merci

import android.graphics.Bitmap; 
import android.support.v4.util.LruCache; 
import com.android.volley.toolbox.ImageLoader.ImageCache; 

public class LruBitmapCache extends LruCache<String, Bitmap> implements ImageCache { 

public LruBitmapCache(int maxSize) { 
    super(maxSize); 
} 

@Override 
protected int sizeOf(String key, Bitmap value) { 
    return value.getRowBytes() * value.getHeight(); 
} 

@Override 
public Bitmap getBitmap(String url) { 
    return get(url); 
} 

@Override 
public void putBitmap(String url, Bitmap bitmap) { 
    put(url, bitmap); 
} 

} 
+0

Quelqu'un pourrait-il commenter le raisonnement de maxMemory/8? – TestBest

+0

Quelle est la logique d'utilisation de 1/8ème de la mémoire max pour Bitmap Cache? – TestBest

Répondre

2

Pour calculer la taille d'un bitmap qui prend la taille de l'écran, que je suppose est ce que vous cherchez, et stocker trois de ces bitmaps dans un LRUCache d'un définir la taille qui correspond à la mémoire occupée par ces bitmaps, serait:

// Gets the dimensions of the device's screen 
DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
int screenWidth = dm.widthPixels; 
int screenHeight = dm.heightPixels; 

// Assuming an ARGB_8888 pixel format, 4 bytes per pixel 
int size = screenWidth * screenHeight * 4; 

// 3 bitmaps to store therefore multiply bitmap size by 3 
int cacheSize = size * 3; 

de là, vous devriez être en mesure de travailler sur la taille du cache, vous devez créer pour stocker ces bitmaps.

+0

Est 4 octets par pixel un maximum? existe-t-il des formats qui utilisent plus de 4 octets par pixel? – TestBest

+0

Pas que je sache pour Android. Les deux seuls que j'utilise sur la plateforme Android sont ARGB_8888 et RGB_565, qui ont tous les deux 4 octets par pixel. – Kavan

+0

Comment pourriez-vous comparer en utilisant 1/8 de la mémoire totale à l'aide de 3 écrans de valeur de mémoire cache? – TestBest