0

在我的应用程序中,我正在从 Internet 获取提要。feed 包含一些文本信息和图像。我必须将图像存储在LruCache中,因为我参考了Google 开发者网站并按照那里所示的方式实现。这个实现工作正常。但由于我的应用程序支持 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 级别 10,有什么办法吗?

4

1 回答 1

0

要计算 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();
    }
}

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

于 2015-07-24T07:54:27.540 回答