2011-08-12 5 views
1

私はテストアプリケーションでfedorの遅延ロードリストの実装を使用しています。ここで、1回のボタンクリックでキャッシュをクリアできます。ロードされたイメージのキャッシュサイズをlistviewで取得し、キャッシュをプログラムでクリアするにはどうすればよいですか?ここで Androidでキャッシュサイズを取得する方法

は、キャッシュされた画像を保存するためのコードです:

public ImageLoader(Context context){ 
    //Make the background thead low priority. This way it will not affect the UI performance. 
    photoLoaderThread.setPriority(Thread.NORM_PRIORITY-1); 
    mAssetManager = context.getAssets(); 

    //Find the dir to save cached images 
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     cacheDir = new File(android.os.Environment.getExternalStorageDirectory(),"LazyList"); 
    else 
     cacheDir = context.getCacheDir(); 
    if(!cacheDir.exists()) 
     cacheDir.mkdirs(); 
} 

編集:私はclearCache()、メソッド内のコードのこの部分を追加しましたが、私はまだ見ることができないので、基本的に

私がスクロールしているときにイメージが再びロードされ始めます。

public void clearCache() { 
    //clear memory cache 

    long size=0; 
    cache.clear(); 

    //clear SD cache 
    File[] files = cacheDir.listFiles(); 
    for (File f:files) { 
     size = size+f.length(); 
     if(size >= 200) 
      f.delete(); 
    } 
} 

答えて

3

キャッシュディレクトリのサイズを見つけるには、codebelowを使用します。

public void clearCache() { 
    //clear memory cache 

    long size = 0; 
    cache.clear(); 

    //clear SD cache 
    File[] files = cacheDir.listFiles(); 
    for (File f:files) { 
     size = size+f.length(); 
     f.delete(); 
    } 
} 

これはバイト数を返します。

+0

私はちょうど私が今使っているコードを使用して私の質問を編集して、それでも画像がスクロールダウンした後にロードし表示することはできません。 –

+0

ここで、キャッシュをクリアしていますか?なぜこのコードをやっているのか(size> = 200) f.delete(); –

+0

私はこれを次のような主なアクティビティで呼びます:adapter.imageLoader.clearCache(); adapter.notifyDataSetChanged(); 。私はそれが大きさがおそらく200kbに​​達するとキャッシュを削除したいので、私はIFを入れます。それは正しいですか? –

0

...キャッシュをクリアするには、ちょうどdelete the directoryと空のものを作り直してください。

1

これは私には、より正確なされています:

private void initializeCache() { 
    long size = 0; 
    size += getDirSize(this.getCacheDir()); 
    size += getDirSize(this.getExternalCacheDir()); 
} 

public long getDirSize(File dir){ 
    long size = 0; 
    for (File file : dir.listFiles()) { 
     if (file != null && file.isDirectory()) { 
      size += getDirSize(file); 
     } else if (file != null && file.isFile()) { 
      size += file.length(); 
     } 
    } 
    return size; 
} 
関連する問題