【问题标题】:Universal image loader - clear cache manually通用图像加载器 - 手动清除缓存
【发布时间】:2013-06-01 03:10:56
【问题描述】:

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

但是,我想在我的应用关闭时清除磁盘缓存(例如在 onStop() 中),但只应删除超过给定限制的最旧缓存文件(如 TotalSizeLimitedDiscCache 那样)。

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

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

有什么想法可以实现吗?

【问题讨论】:

  • 您不能保证应用程序在调用onStop() 时停止。这只表示当前活动正在停止。与实现另一种缓存机制所花费的时间相比(这可能会减慢应用程序的速度),性能损失非常小。
  • @jeff_bordon 你有用于构建 ImageLoader 实例的代码吗? @Androidy 是的,您可以区分应用程序何时结束,例如 if(isFinishing()) { do something}
  • @jeff_bordon 你可以拥有 BoB(两者兼得)。请参阅此处的源代码github.com/nostra13/Android-Universal-Image-Loader/blob/master/… 编写 UnlimitedAgeDiskCache 将非常简单。您只需要知道现在和那时之间的日期和差异。我认为如果是几个 if 问题,它不会降低 ListViews 的速度。
  • isFinishing() 只告诉您当前活动正在停止,而不是应用程序。如果您只使用一个Activity,当然可以,否则您会遇到问题。

标签: java android universal-image-loader


【解决方案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();
}

【讨论】:

    【解决方案2】:

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

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

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

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

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

    How to force a cache clearing using Universal Image Loader Android?

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

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 2015-06-20
      • 2015-04-02
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多