2012年8月21日火曜日

Support Package の LruCache を使うときの注意点

Android 3.1 (API Level 12) からキャッシュ用の便利クラスである LruCache が追加されました。

API Level 12 の方にはサンプルコードが載っています。

  1. int cacheSize = 4 * 1024 * 1024// 4MiB  
  2. LruCache bitmapCache = new LruCache(cacheSize) {  
  3.     protected int sizeOf(String key, Bitmap value) {  
  4.         return value.getByteCount();  
  5.       
  6.     }  
  7. }  


この LruCache は Support Package にもバックポートされています。

ここで注意点なのですが、上記のコードをこっちで使う場合は

  1. int cacheSize = 4 * 1024 * 1024// 4MiB  
  2. LruCache bitmapCache = new LruCache(cacheSize) {  
  3.     protected int sizeOf(String key, Bitmap value) {  
  4.         return bitmap.getRowBytes() * bitmap.getHeight();  
  5.     }  
  6. }  


のようにします。

実は Bitmap の getByteCount() メソッドも API Level 12 からなんです。

このメソッドの中身は次のように getRowBytes() と getHeight() の積です。

http://tools.oesf.biz/android-4.0.1_r1.0/xref/frameworks/base/graphics/java/android/graphics/Bitmap.java#getByteCount
  1. 828     public final int getByteCount() {  
  2. 829         // int result permits bitmaps up to 46,340 x 46,340  
  3. 830         return getRowBytes() * getHeight();  
  4. 831     }  


わざわざ新しく API に入れるほどでもなかったのでは。。。




0 件のコメント:

コメントを投稿