当Android应用被关闭时调用哪个方法?

3

我发现onDestroy()只有在按下返回按钮时才会被调用,而不是在使用最近应用程序关闭应用程序(通过按叉号或滑动应用程序)或在应用程序管理器中关闭应用程序时。

以下是我的onDestroy()代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            ((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE))
                    .clearApplicationUserData();
    }

我编写了代码,在 onDestroy() 被调用时删除数据和缓存,所以如果有人按下返回按钮,数据和缓存将被清除并关闭应用程序(而不是进入后台),但当我从最近使用的应用程序或应用程序管理器中关闭它时,数据和缓存仍然存在。
如何在我的应用程序关闭时删除数据?

这可能会对你有所帮助。请尝试搜索。链接 - Ankita Shah
这是您问题的完整描述:https://dev59.com/hWIj5IYBdhLWcg3wx30x - noobEinstien
4个回答

5
我发现只有在按下返回按钮时才会调用 onDestroy() 方法,而关闭应用程序、使用最近运行应用(通过按叉号或滑动)或使用应用程序管理器并不会触发它。 onDestroy() 方法可能会被调用也可能不会,通常情况下要么该方法被调用,要么进程被终止,或者代码崩溃。
如何在应用程序关闭时删除数据?你不能。用户或操作系统随时可能因任何原因终止进程,此时你的应用程序可能会被调用 onDestroy() 也可能不会。虽然通过 Service 上的 onTaskRemoved() 可能会提高成功率,但这本身并不可靠,也无法覆盖所有情况。
如果你不希望在进程终止时数据保留在文件中,请不要创建这些文件,而是将数据保存在内存中。

1

当我们从最近项目中移除应用程序时,将调用Service方法onTaskRemoved


0
如果我们需要清除应用程序中的数据,则使用Service,如果您从最近使用的应用程序中删除应用程序,则会在Service中调用onTaskRemoved()。因此,在onTaskRemoved()中编写代码以清除会话数据、管理资源等。

0

我已经检查过了,当我强制从任务管理器关闭应用程序时,onDestroy()方法会被调用。我是这样测试的:

  1. 使用主页按钮最小化应用程序 --> 这将调用

    onPause()
    onStop()
    
  2. 从任务管理器中删除应用程序,然后会为该MainActivity(启动器)调用onDestroy()

在Android中,没有退出应用程序的概念。

如果您正在使用共享首选项,则应在用户注销时清除共享首选项值,而不是在应用程序关闭时清除缓存值,以此来维护缓存值。

在Android应用程序中,除非您强制从堆栈中删除它,否则应用程序不会关闭。只有特定的活动被销毁。

最佳实践是,当用户登录时,将凭据存储到共享首选项或全局变量中。当用户从特定活动中注销时,请清除会话或缓存值。

如果您想要在完全关闭应用程序时清除缓存值,请使用全局变量(静态变量)而不是共享首选项。

class GlobalValues{
    public static String userName;
    public static String password;
}

静态变量在应用程序进程完全销毁时被销毁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接