我正在使用LRu Cache从http协议下载和显示图像。我的应用是一个有5个片段的活动。每个片段都加载带有图像和文本的Custom ListView。
我的应用程序总是在一段时间后崩溃。
这是我的LogCat:
11-03 18:00:22.613:E / dalvikvm-heap(1558):为进程生成hprof:com.example.example PID:1558 11-03 18:00:24:00: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,Proc Limit = 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;
}
}
我在这个论坛和谷歌搜索了如何解决这个问题,但我没有完成解决它。有人可以帮帮我吗?我的申请目标来自sdk 8.
提前致谢。
答案 0 :(得分:0)
尝试计算应用程序可用的最大内存量,并根据需要使用内存量。 你可以尝试这种方法
final int maxMemory = (int)(Runtime.getRuntime().maxMemory() /1024);