我发现只有在按下后退按钮时才会调用onDestroy()
,当使用最近的应用程序(通过按下交叉或滑动应用程序)关闭应用程序时,不或在应用程序管理器中
以下是onDestroy()
中的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE))
.clearApplicationUserData();
}
我在调用onDestroy()
时编写了删除数据和缓存的代码,所以如果有人按下Back按钮,数据和缓存会清除并且app关闭(而不是转到后台)但是当我关闭它时从Recent Apps或App Manger中,数据和缓存仍然存在。
我的应用关闭后如何删除数据?
答案 0 :(得分:3)
任何特定活动或服务都可能会或可能不会调用我发现Ondestroy()仅在按下后退按钮时被调用,而不是在使用最近的应用程序(通过按下交叉或滑动应用程序)或应用程序管理器关闭应用程序时调用。
onDestroy()
。一般规则是调用 onDestroy()
,或者您的进程被终止,或者您的代码崩溃。
如何在应用关闭时删除数据?
你没有。您的进程可能会在任何时候由用户或操作系统以任何理由终止。发生这种情况时,可能会或可能不会使用onDestroy()
调用。虽然您可以通过onTaskRemoved()
上的Service
稍微提高您的成功率,但这本身已被证明是不可靠的,并且它不会涵盖所有情景。
如果您不希望在进程终止时数据存在于文件中,请不要首先创建文件。只需抓住内存中的数据。
答案 1 :(得分:1)
当我们从最近的项目中移除应用时,系统会调用Service
方法onTaskRemoved
。
答案 2 :(得分:0)
我已经检查了当我从任务管理器中强制关闭应用程序时调用了onDestroy()
方法。我测试过这样:
使用主页按钮最小化应用程序 - >这个叫
onPause()
onStop()
从任务管理器中删除该应用,然后为onDestroy()
(启动器)调用MainActivity
。
在Android中没有退出应用程序的概念。
如何维护缓存值,如果您使用共享首选项,则应在用户注销时清除共享首选项值,而不是在应用程序关闭时清除。
在Android应用程序中,只有强行将其从堆栈中删除才会关闭。只是某项活动被摧毁。
最佳做法是用户登录时,将凭据存储到共享首选项或全局变量中。当用户从特定活动注销时,请清除会话或缓存的值。
如果要在应用程序完全关闭时清除缓存的值,请使用全局变量(静态变量)而不是共享首选项。
class GlobalValues{
public static String userName;
public static String password;
}
当应用程序进程被完全销毁时,会破坏静态变量。
答案 3 :(得分:0)
如果我们需要清除app中的数据,请使用Service,如果从最近的应用程序中删除应用程序,将在服务中调用onTaskRemoved()。因此在onTaskRemoved()中编写代码以清除会话数据,管理资源等。