2016-09-28 6 views
0

RecyclerView.AdapteronBindViewHolderは次のようになりましたになります。Androidのメモリにイメージをキャッシュするのは意味がありますか?

@Override 
public void onBindViewHolder(UserSettingHolder userSettingHolder, int i) { 
    // .. some code 
    try { 

     // TODO: Image loader need 
     File file = new File(MainActivity.context.getFilesDir(), _id + ".photo"); 
     InputStream in = new BufferedInputStream(new FileInputStream(file)); 
     byte[] buf = new byte[(int) file.length()]; 
     int numRead = in.read(buf); 

     Bitmap bitmap = BitmapFactory.decodeByteArray(buf, 0, numRead); 
     userSettingHolder.icon.setImageBitmap(bitmap); 

    } catch (Exception e) { 
     System.out.print(e); 
    } 
} 

私はかなり頻繁に呼び出されていないonBindViewHolderでespeciallどのファイルシステムから常にファイルを読むためには効率的ではないと思います。イメージを保存するために 'メモリキャッシュ'を使用することを提案しますか? iOSではNSCacheがこのために提供されています。メモリが不足している場合は、最初にパージされます。NSCacheには利点があります。

Androidの代替技術とは何ですか?

+1

LruCache ///// ... – Selvin

+0

もいくつかのヒント... onBindViewHolderでdecodeByteArrayやIO操作を使用していません...このために別のスレッドを使用します...しかし、ビューリサイクルのために実装するのは難しいです(image1からview1への読み込みが開始されました... view1がリサイクルされています)。画像1の読み込みが終了しました...間違った画像が表示されます)...既に存在する画像ローダーライブラリの1つを使用してください...ほとんどがメモリキャッシュを持っています – Selvin

+0

Picasso、Glide、Universal Image Loader.Takeピック。 –

答えて

0

このような状況で使用できるサードパーティライブラリが多数あります。ここ はグライドと例です。

 Glide.with(context) 
    .load(filePath) 
    .setMemoryCache(new LruResourceCache(yourSizeInBytes)) 
    .into(youImageView); 

のLib:https://github.com/bumptech/glide

関連する問題