我正在使用LRUCache来缓存不同的对象并避免出现内存问题。除了位图之外,这适用于所有类型的java对象。使用位图,我在一段时间后解码文件(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 !");
}
}
new Infos:我认识到即使我用evictAll()手动清理LRUCache,我的总内存(Runtime.getRuntime(。。totalMemory())也永远不会减少。当总内存达到接近最大内存(Runtime.getRuntime()。maxMemory())时,我的OutofMemory错误就会出现。
我不明白这一点。为什么我的应用程序在完全清除LRUCache时可以使用可用空间来解码图像(nativeDecodeAsset)?