2013-08-02 27 views
0

如何計算位圖大小?我的理解是它應該支持來自Volley的Google I/O展示的三個完整屏幕。有誰知道我可以如何計算任何給定的Android設備上的三個完整屏幕的內存大小?我認爲這是指內存緩存,所以一個BitmapCache但不確定。用於排球的BitmapLruCache計算緩存大小?

現在我已經看到了下面的計算建議,但不確定這是否與保持三個屏幕值的數據緩存在內存中一致。

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

更新:什麼是使用緩存總內存的1/8的邏輯。這與保持三屏數據的價值相比如何?

感謝

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

有人可能會對maxMemory/8推理髮表評論嗎? – TestBest

+0

使用位圖緩存的最大內存的1/8的邏輯是什麼? – TestBest

回答

2

要計算一個位圖,佔用了屏幕,這是我推測的大小尺寸爲你在尋找什麼,並存儲這三個位圖中的一個LRUCache集大小這將對應於這些位圖所佔用的內存,將是:

// 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; 

由此看來,你應該能夠制定出您需要創建存儲這些位圖緩存大小。

+0

每個像素最多4個字節?有沒有使用每個像素超過4個字節的格式? – TestBest

+0

不是我所知道的Android。我在Android平臺上使用的唯一兩個是ARGB_8888和RGB_565,它們每個像素都有4個字節。 – Kavan

+0

如何使用總共三分之一的內存與使用三個屏幕的內存緩存進行比較? – TestBest