2

我是新來的Android的LruCache,我想把這個緩存中的位圖圖像(JPEG),以防止內存錯誤和內存異常, 所以我不明白爲什麼我的代碼不工作。這裏是我的代碼:android:LruCache返回null

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; 
     } 
    }; 
} 

我不知道爲什麼不工作:( 感謝

回答

1

這是因爲低緩存大小爲數據存儲所以..check它通過給予 final int cacheSize = maxMemory;或通過足夠的緩存大小

+1

感謝您的答覆,但我改線 最終詮釋的cachesize = maxMemory/8; 至 final int cacheSize = maxMemory; 但沒有改變 – Amir

0

這適用於我:

final int memClass = ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); 
final int cacheSize = 1024 * 1024 *memClass ; 
0

你的問題就出在這裏

return (bitmap.getRowBytes() * bitmap.getHeight() * 4)/1024; 

應該

return (bitmap.getRowBytes() * bitmap.getHeight())/1024;