【问题标题】:which method is called when app is closed in android?在android中关闭应用程序时调用哪个方法?
【发布时间】:2017-02-26 09:35:53
【问题描述】:

我发现onDestroy() 仅在按下后退按钮时调用,不会在使用最近的应用程序(通过按十字键或滑动应用程序)或在应用程序管理器中关闭应用程序时调用。

下面是我在onDestroy()中的代码:

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

onDestroy() 被调用时,我编写了删除数据和缓存的代码,所以如果有人按下后退按钮,数据和缓存会清除并且应用程序关闭(而不是进入后台)但是当我从最近关闭它时应用程序或应用程序管理器保留数据和缓存。

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

【问题讨论】:

标签: android


【解决方案1】:

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

onDestroy() 可能会或可能不会在任何给定的活动或服务上被调用。一般规则是任一 onDestroy() 被调用,或者您的进程被终止,或者您的代码崩溃。

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

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

如果您不想在进程终止时将数据保存在文件中,请不要首先创建文件。只需保留内存中的数据即可。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      Android 中没有退出应用的概念。

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

      在 Android 中,应用程序在您强制从堆栈中删除之前不会关闭。只有一个特定的活动被破坏。

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-13
          • 2014-09-05
          • 1970-01-01
          • 2014-01-02
          相关资源
          最近更新 更多