0

当我尝试onDestroy()在 MainActivity 的方法中使用下面的代码时,它接缝它不起作用。我做错了什么?

代码:

@Override
protected void onDestroy() {
    super.onDestroy();
    deleteCacheData();
}

public void deleteCacheData() {
    File cacheDir = this.getCacheDir();
    File[] files = cacheDir.listFiles();

    if (files != null) {
        for (File file : files) {
            file.delete();
        }
    }
}
4

2 回答 2

1

您的代码有两种情况:

  1. 您不能可靠地取决于onDestroy()将调用该方法的情况。因为没有这样的保证,它总是会被系统调用。onDestroy()这里是文档的摘录:

    受保护的无效 onDestroy ()

    在销毁活动之前执行任何最终清理。这可能是因为 Activity 正在完成(有人在其上调用了 finish()),或者因为系统正在临时销毁该 Activity 实例以节省空间。您可以使用 isFinishing() 方法区分这两种情况。

    注意:不要指望这个方法被称为保存数据的地方!例如,如果一个活动正在内容提供者中编辑数据,那么这些编辑应该在 onPause() 或 onSaveInstanceState(Bundle) 中提交,而不是在这里。此方法通常用于释放资源,例如与活动关联的线程,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。在某些情况下,系统会简单地终止 Activity 的宿主进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行打算在进程消失后保留的事情。

    派生类必须调用该方法的超类实现。如果他们不这样做,将引发异常。

  2. 你应该在打电话deleteCacheData()之前打电话给你的super.onDestroy()。所以,这是不正确的:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        deleteCacheData();
    }
    

    这是正确的:

    @Override
    protected void onDestroy() {
        deleteCacheData();
        super.onDestroy();
    }
    
于 2019-07-24T07:19:55.883 回答
0

如果您使用 Windows 操作系统,因为在您的 Windows 任务管理器中,当android studio启动或构建运行或停止命名时,一个进程正在运行

Java Jmt 首先停止它然后你可以直接删除这两个构建文件夹而不需要清除缓存

于 2019-07-24T06:42:47.507 回答