【问题标题】:how to Clear Application cache on exit in android如何在android中退出时清除应用程序缓存
【发布时间】:2017-10-01 20:14:18
【问题描述】:

我正在尝试清除我自己的应用程序的缓存在我退出她之后 类似于 应用程序 --> 管理应用程序 --> “我的应用程序” --> 清除缓存 ,我已经尝试过这段代码,但不起作用。我把它放在 main_acitivty.java 中

void onCreate(){
}
..
@Override
protected void onStop(){
    super.onStop();
}

//Fires after the OnStop() state
@Override
protected void onDestroy() {
    super.onDestroy();
    try {
        trimCache(this);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
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;
            }
        }
    }
    // The directory is now empty so delete it
    return dir.delete();
}

【问题讨论】:

  • 我想你会想打电话给trimCache 之前 super.onDestroy,不是吗?
  • @MattClark 感谢回复我想在退出我的应用程序后清除缓存
  • 我明白了,您已经在退出事件的代码路径中。 super.onDestroy 将清除代码上游的所有对象。在允许应用程序完全退出之前,您需要清除缓存。我假设您的缓存实际上并未被清除,因为应用程序在您的代码运行之前退出。还有,当你1:1复制别人的代码时,at least attribute it to the author
  • onDestroy 并不总是被调用,也没有简单的方法可以知道应用程序何时完全关闭。
  • 最好使用后台服务/线程来完成这类工作。您可能还想在 onPause 中执行此操作,因为仅当应用程序以某种方式被杀死时才会调用 onDestroy。

标签: android clear-cache


【解决方案1】:

我建议在关闭应用之前不要做这么长时间的事情。

它可以在视觉上减慢您的应用关闭速度,或者完全可以被系统忽略。

如果您暂时使用此文件,则删除的最佳时间是在使用文件结束之后。

如果您使用这些文件来提高应用程序中某些内容的速度,那么直接向用户提供缓存管理是正常的。例如设置中的简单按钮“清除缓存”。

正如@Nicolas Maltais 提到的,onDestroy 并不总是被调用。此外,在某些情况下,也不总是调用 onStop。

但是,如果您只想以这种方式执行此操作,您还应该知道该应用程序正在关闭。如果有不止一项活动,您应该计算打开/关闭活动。最简单的方法是实现Activity Lifecycle callback 并在Application 类中注册它们。在这个实现中,您应该在 onCreate 中增加计数器变量并在 onDestroy 中减少。并且您可以在 onDestroy 减少后确定应用关闭为零计数器。

int mCounter;

void onCreate() {
    ++mCounter
}

void onDestroy() {
    --mCounter;
    if (mCounter == 0) {
        // app is closing 
    }
}

更新: 您应该将此回调存储在应用程序类中或作为 Singleton。

【讨论】:

  • 我认为 mCounter 需要在实例状态包中保存和恢复才能正常工作
猜你喜欢
  • 2012-06-14
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
相关资源
最近更新 更多