0

サーバーからに画像をダウンロードListViewしてSDカードに保存しています。

そして、次回リストビューが表示されたときに、非同期方式のみを使用してSDカードからリストビューにアクセスしている場合は、このアプローチを使用して、ユーザーがサーバーにアクセスする必要がないようにします。

しかし、すべての画像がSDカードからリストビューに読み込まれているときに、かなり速くスクロールすると、キャッシュからではなくSDカードからのみアクセスしようとするたびに推測されます。

サーバーから画像をダウンロードしているときにも同じ問題に直面していたので、SDカードに保存しようと思いました。しかし、私は同じ問題に直面しています。

これが私のコードListImageDownloaderです。と呼ばれる関数があり、コードが次のようdownloadBitmap(String)な名前の別の関数を作成しましたdownloadSDBitmap(String)

Bitmap downloadSDBitmap(String urlId) {

         Bitmap bitmap = null;
         File file = new File( 
                 fileLoc +"/"+ urlId+".png");

         if(file.exists()){
             Log.d("PATH" , file.getAbsolutePath());

             bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
         }

         return bitmap;

}

これを除けば、キャッシュコード全体とすべてが同じです。だから誰かが私を助けることができます私がGtalk速くスクロールするとAndroidアプリケーションのようにそれを改善する方法それはその後一度だけ画像をロードします私が速くスクロールすると画像はそのままでネットワークからフェッチされません

アップデート

これらは私のパラメータです

final static int MAX_ENTRIES = 150;

private static final int HARD_CACHE_CAPACITY =50;
private static final int DELAY_BEFORE_PURGE = 10 * 1000; // in milliseconds
4

1 に答える 1

1

キャッシングは基本的に利用可能なメモリに依存します。アプリケーションにメモリが残っている場合は、ビットマップをキャッシュする優れたソリューションを実装する必要があります。

以前は、ビットマップをキャッシュするための一般的な方法でした(1年前に試しましたがSoftReference、これWeakReferenceに関する私の質問については、ここで読むことができます)。しかし、Androidのその後のAPIでは、ガベージコレクターがより積極的にそれらを収集するようになったため、それらは推奨されなくなりました。

ここで、 LRUキャッシュを使用することをお勧めします。Android開発者のWebサイトに利用可能な例があります。

于 2012-08-21T20:09:05.710 に答える