奇怪的行为缓存lrucache中的位图
我正在使用LRUCache来缓存不同的对象并避免内存溢出问题。 这对于除了位图以外的所有类型的javaobjects都可以正常工作。 使用位图时,一段时间后解码文件(nativeDecodeAsset)时仍会出现内存不足。 我可以按照内存消耗达到最大。
我只是做以下几点:
public showbitmap(Canvas canvas,String BitmapID){
Bitmap bmtemp=(Bitmap) lrucache.get(BitmapID);
if(bmtemp==null){
bmtemp=getBitmapfromFile(BitmapID);
lrucache.put(BitmapID,bmtemp);
}
if(bmtemp!=null){
canvas.drawBitmap(bmtemp, ..., ...);
}
}
我不使用画布外的位图。 我认为LRUCache应该释放它。 任何提示? 我在论坛上阅读了很多,但仍不知道如何避免这种情况。 我想它与内存碎片有关?
我用entryRemoved增强了我的LRUCache,并在调试Bitmap.recycle时调用。
@Override
protected void entryRemoved(boolean evicted, String key, Object oldobject, Object newobject) {
if(key.startsWith("_img_")){
((Bitmap)oldobject).recycle();
Log.v("Debug recycle", "bitmap recycled !");
}
}
新信息:我认识到,即使我用evictAll()手动清理LRUCache,我的总内存(Runtime.getRuntime()。totalMemory())也不会减少。 当总内存达到接近最大内存(Runtime.getRuntime().maxMemory())时,则出现OutofMemory错误。
我不明白。 为什么当LRUCache被完全清除时,我的应用程序无法使用可用空间来解码图像(nativeDecodeAsset)?
链接地址: http://www.djcxy.com/p/93065.html