奇怪的行为缓存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

上一篇: strange behaviour caching bitmaps in a lrucache

下一篇: Native heap android OOM hardware acceleration