实现LruCache缓存位图图像



在我的应用程序中,我从互联网获取一个提要。提要包含一些文本信息和图像。我必须在LruCache中存储图像,为此我参考了谷歌开发人员网站并实现了如下所示。这个实现工作得很好。但是由于我的应用程序支持api级别10,它显示了一些错误分配缓存大小,我不能声明缓存的大小,因为我使用bitmap.getByteCount(),它显示添加@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)符号,当我打开应用程序在android 2.3应用程序停止响应

import android.support.v4.util.LruCache;
    private LruCache<String,Bitmap> mMemoryCache;
    onCreate(Bundle savedInstanceState){
       manageCache();
    }
    private void manageCache() {
            mMemoryCache = new LruCache<String, Bitmap>(mCacheSize) {
                @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
                @Override
                protected int sizeOf(String key, Bitmap bitmap) {
                    return bitmap.getByteCount() / 1024;
                }
            };
        }
如何支持api level 10呢?

要在API级别12之前计算位图的内存大小,您可以使用以下代码:

int bitmapSize = bitmap.getRowBytes() * bitmap.getHeight();

方法sizeOf看起来像这样:

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
@Override
protected int sizeOf(String key, Bitmap bitmap) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
        return bitmap.getByteCount();
    } else {
        return bitmap.getRowBytes() * bitmap.getHeight();
    }
}

注:您必须以字节为单位返回位图的大小,因此您不能将bitmap. getbytecount()除以1024。

最新更新