2011-08-12 43 views
1

我在我的測試應用程序中使用fedor的延遲加載列表實現,我可以通過單擊按鈕清除緩存。我怎樣才能在列表視圖中獲取加載圖像的緩存大小並以編程方式清除緩存?如何在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

要找到緩存目錄的大小,請使用代碼下面的代碼。

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

你在哪裏調用清除緩存?以及爲什麼你要做這個代碼if(size> = 200) f.delete(); –

+0

我在我的主要活動中調用了這個:adapter.imageLoader.clearCache(); adapter.notifyDataSetChanged(); 。我放了IF,因爲我想讓它在大小達到200kb時刪除緩存。這是我正在做的嗎? –

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; 
} 
相關問題