0

私のアプリケーションでは、インターネットからフィードを取得しています。フィードには、テキスト情報と画像が含まれています。画像をLruCacheに保存する必要があるため、 Google 開発者の Web サイトを参照し、そこに示されているように実装しました。この実装は正常に機能します。しかし、私のアプリケーションは 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 に答える