2011-08-01 66 views
16

我需要找到一種方法如何清除cache.Basically我的應用程序商店,我使用費多爾的(Lazy load of images in ListView)懶列表實現了數據,我想自動清除緩存時,我有例如100個圖像loaded.Any想法如何做到這一點?如何清除緩存的Android

編輯: 代碼:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    list=(ListView)findViewById(R.id.list); 
    adapter=new LazyAdapter(this, mStrings); 
    list.setAdapter(adapter); 

    deleteCache(this); 
    adapter.notifyDataSetChanged(); 


} 

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

你好,你有答案嗎?我和你有同樣的問題。我想清除緩存來加載新的圖像。謝謝 –

回答

33

這將刪除緩存

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

以及如何調用它們? – hardartcore

+0

通過deleteCache(this)調用此方法; –

+1

仍然沒有刪除緩存 – hardartcore

4

我希望這可以幫助您獲得進一步

public static void trimCache(Context context) { 
    File dir = context.getCacheDir(); 
    if(dir!= null && dir.isDirectory()){ 
     File[] children = dir.listFiles(); 
     if (children == null) { 
      // Either dir does not exist or is not a directory 
     } else { 
      File temp; 
      for (int i = 0; i < children.length; i++) { 
       temp = children[i]; 
       temp.delete(); 
      } 
     } 

    } 

} 
+1

請不要將標記行或簽名添加到您的帖子。你的名字和你的個人資料鏈接會自動顯示在你寫的每個問題或答案的底部。 –

-4

丟棄舊的適配器和附加listview到適配器的新實例(l雖然istview會失去滾動位置)。例如:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    m_adapter = new MyAdapter(this); 
     final ListView listView = (ListView) getView() 
       .findViewById(R.id.my_list); 
     listView.setAdapter(m_adapter); 
    } 
} 
+0

這與清除應用程序緩存有什麼關係? – Tomas

0

如果使用Apache下議院IO,你可以用一個線做到這一點(不包括的try-catch):

try { 
    FileUtils.deleteDirectory(context.getCacheDir()); 
} catch (IOException e) { 
    // Do some error handling 
} 
1

可以調用系統服務clearApplicationUserData()(只工作爲> =奇巧版)

這樣你就可以進行版本做了檢查,然後一切都會罰款:) 這裏是代碼:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      ((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE)) 
        .clearApplicationUserData(); 
    } 
+0

歡迎來到StackOverflow!除了提供使用KitKat或更高版本的操作信息外,還請爲使用較低版本的用戶提供信息。 – buczek

+0

其實這部分代碼完全崩潰了我的應用程序。 – Borzh

+0

此方法用於清除**所有應用程序的數據**,而不是應用程序的緩存!根據這個[answer](https://stackoverflow.com/a/37086256/2416369),預計應用程序將關閉,因爲此方法完全重置應用程序,所以應用程序不需要運行... –