我使用LRu緩存從http協議下載和顯示圖像。我的應用程序是一個有5個片段的活動。每個片段使用圖像和文本加載自定義ListView。Android LRU緩存內存不足錯誤
我的應用程序在一段時間後總是崩潰。
這是我的logcat:
11-03 18:00:22.613:E/dalvikvm堆(1558):生成HPROF過程:com.example.example PID:1558 11-03 18: 00:24.004:E/dalvikvm(1558):無法打開/data/misc/app_oom.hprof:權限被拒絕 11-03 18:00:24.064:E/dalvikvm-heap(1558):hprofDumpHeap失敗,結果爲: -1 11-03 18:00:24.064:E/dalvikvm-heap(1558):在進程hprofDumpHeap之後 11-03 18:00:24.064:E/dalvikvm(1558):內存不足:堆大小= 196608KB ,分配= 193561KB,限制= 196608KB,程序限制= 196608KB 11-03 18:00:24.064:E/dalvikvm(1558):額外信息:足跡= 196552KB,允許的足跡= 196608KB,修剪= 12KB
這是我LRU類:
public class NBitmapCache extends LruCache<String, Bitmap>
implements ImageCache{
public NBitmapCache(int maxSize) {
super(maxSize);
}
public NBitmapCache(Context ctx) {
this(getCacheSize(ctx));
}
@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);
}
// Returns a cache size equal to approximately three screens worth of images.
public static int getCacheSize(Context ctx) {
final DisplayMetrics displayMetrics = ctx.getResources().
getDisplayMetrics();
final int screenWidth = displayMetrics.widthPixels;
final int screenHeight = displayMetrics.heightPixels;
// 4 bytes per pixel
final int screenBytes = screenWidth * screenHeight * 4;
return screenBytes * 3;
}
}
我搜索在這個論壇和谷歌如何解決這個problema,但我不完成解決這個問題。任何人都可以幫助我?我的申請的目標是從sdk 8。
在此先感謝。
我覺得這是與位圖的循環 - 看'Bitmap.recycle()' – shkschneider 2014-11-03 17:13:05
我不明白我怎麼能實現我的類此方法。任何人都可以幫助我? – antpr 2014-11-04 17:29:12