2

私はAndroidでLruCacheを初めて使用し、メモリエラーとメモリ例外を防ぐためにこのキャッシュにビットマップ画像(JPEG)を入れて取得したいので、コードが機能しない理由を理解できません。ここに私のコードがあります:

ImageView imageview = (ImageView)findViewById(R.id.imageView1);
Bitmap b = BitmapFactory.decodeFile(imagePath); 
mMemoryCache.put("mykey", b);
b = mMemoryCache.get("mykey");
imageview.setImageBitmap(b);

これは私のLruCacheコードです:

import android.support.v4.util.LruCache;
...
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;
    mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
        @Override
        protected int sizeOf(String key, Bitmap bitmap) {
            return (bitmap.getRowBytes() * bitmap.getHeight() * 4)/1024;
        }
    };
}

なぜ機能しないのかわかりません:(ありがとう

4

3 に答える 3

1

これは、データを格納するキャッシュ サイズが小さいためでした。最終的な int cacheSize = maxMemory; を指定して確認してください。または十分なキャッシュサイズによって

于 2014-02-15T11:57:00.017 に答える
0

これは私のために働く:

final int memClass = ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
final int cacheSize =  1024 *  1024 *memClass ;
于 2014-02-15T15:16:56.553 に答える