奇怪的行为缓存lrucache中的位图

时间:2014-05-12 12:00:52

标签: android bitmap out-of-memory

我正在使用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)?

0 个答案:

没有答案