在Android中关闭应用程序时调用哪个方法?

时间:2016-10-17 11:55:28

标签: android

我发现只有在按下后退按钮时才会调用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中,数据和缓存仍然存在。

我的应用关闭后如何删除数据?

4 个答案:

答案 0 :(得分:3)

  

我发现Ondestroy()仅在按下后退按钮时被调用,而不是在使用最近的应用程序(通过按下交叉或滑动应用程序)或应用程序管理器关闭应用程序时调用。

任何特定活动或服务都可能会或可能不会调用

onDestroy()。一般规则是调用 onDestroy(),或者您的进程被终止,或者您的代码崩溃。

  

如何在应用关闭时删除数据?

你没有。您的进程可能会在任何时候由用户或操作系统以任何理由终止。发生这种情况时,可能会或可能不会使用onDestroy()调用。虽然您可以通过onTaskRemoved()上的Service稍微提高您的成功率,但这本身已被证明是不可靠的,并且它不会涵盖所有情景。

如果您不希望在进程终止时数据存在于文件中,请不要首先创建文件。只需抓住内存中的数据。

答案 1 :(得分:1)

当我们从最近的项目中移除应用时,系统会调用Service方法onTaskRemoved

答案 2 :(得分:0)

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

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

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

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

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

    在Android应用程序中,只有强行将其从堆栈中删除才会关闭。只是某项活动被摧毁。

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

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

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

    当应用程序进程被完全销毁时,会破坏静态变量。

答案 3 :(得分:0)

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

相关问题
最新问题