8

我正在使用 Universal Image Loader 在列表视图中显示我的应用程序中的图像。我正在使用UnlimitedDiscCache,因为根据文档,这是最快的缓存机制。

但是,我想在我的应用程序关闭时(例如 in onStop())清除磁盘缓存,但只有超过给定限制的最旧的缓存文件应该被删除(就像这样TotalSizeLimitedDiscCache做)。

我知道,ImageLoader.clearDiscCache()但在我的情况下,这会清除完整的缓存,因为我之前使用UnlimitedDiscCache过......

所以我想在用户加载和滚动列表视图时拥有最快的缓存机制,并在用户不再与应用程序交互时清除慢速缓存。

有什么想法可以实现这一目标吗?

4

2 回答 2

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();
}
于 2013-08-07T18:05:59.033 回答
0

如果要从内存中清除缓存,可以使用以下代码:

MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());

如果还想清除磁盘中的缓存,可以使用以下代码:

DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache());

这是一种更简单的清除缓存的方法。您可以在此线程中找到类似的答案:

如何使用 Universal Image Loader Android 强制清除缓存?

我希望这些信息对您有所帮助。:)

于 2016-08-22T11:59:55.993 回答