我正在使用Universal Image Loader在listviews中显示我的应用中的图像。我正在使用UnlimitedDiscCache
,因为根据文档,这是最快的缓存机制。
但是,我希望在我的应用关闭时清除光盘缓存(例如在onStop()
中)但是只应删除超过给定限制的最旧的缓存文件(如TotalSizeLimitedDiscCache
那样)
我知道ImageLoader.clearDiscCache()
,但在我的情况下,这会清除整个缓存,因为我之前使用的是UnlimitedDiscCache
...
所以我想在用户加载和滚动列表视图时使用最快的缓存机制,并在用户不再与应用程序交互时清除慢速缓存。
我是如何实现这一目标的?
答案 0 :(得分:1)
从这里查看https://stackoverflow.com/a/7763725/1023248可以帮助你..
@Override
protected void onDestroy() {
// closing Entire Application
android.os.Process.killProcess(android.os.Process.myPid());
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
trimCache(this);
super.onDestroy();
}
public static void trimCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory()) {
deleteDir(dir);
}
} catch (Exception e) {
// TODO: handle exception
}
}
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;
}
}
}
// <uses-permission
// android:name="android.permission.CLEAR_APP_CACHE"></uses-permission>
// The directory is now empty so delete it
return dir.delete();
}
答案 1 :(得分:0)
如果要从内存中清除缓存,可以使用以下代码:
MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());
如果您还想清除磁盘中的缓存,可以使用以下代码:
DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache());
这是一种更简单的清除缓存的方法。 您可以在此主题中找到类似的答案:
How to force a cache clearing using Universal Image Loader Android?
我希望这些信息有用。 :)