【问题标题】:Detect termination of Application, Android检测应用程序终止,Android
【发布时间】:2012-06-08 07:01:48
【问题描述】:

我需要一种方法来检测我的应用程序何时关闭,以便我可以告诉网络服务器清除它正在存储的会话变量。有什么办法吗?

【问题讨论】:

    标签: android session-variables android-lifecycle


    【解决方案1】:

    我假设您的应用程序扩展了 Activity。

    您可以使用onDestroy() 方法:

    来自docs

    onDestroy() 是在你的活动被销毁之前你收到的最后一个调用。这可能是因为 Activity 正在完成(有人在其上调用了 finish(),或者因为系统正在临时销毁该 Activity 实例以节省空间。您可以使用 isFinishing() 方法区分这两种情况。

    您的代码如下所示:

    public class YourAppActivity extends Activity {
         ...
         ...
    
         @Override
         protected void onDestroy() {
             super.onDestroy();
             //clear your session variable. 
             //you may want to do this quick, and on another thread 
             //to prevent android from killing your app
         }
     }
    

    【讨论】:

    • 也来自文档:“在某些情况下,系统会简单地终止活动的托管进程而不调用此方法(或任何其他方法),因此不应使用它来执行以下操作打算在过程消失后继续存在。”所以不能保证在应用程序终止时会调用onDestroy()
    【解决方案2】:

    检查 Activity Lifecycle 和 我想你可以在onDestroy()上做到这一点

    【讨论】:

      【解决方案3】:

      您可以尝试onDestroy(),它在应用程序被系统销毁时运行,或者onStop() 在应用程序失去可见性时运行(通常在销毁之前)。您的代码将如下所示:

      public void onDestroy() { super.onDestroy(); //Enter your code here to do stuff }

      但是,在销毁您的应用程序时,它所使用的变量将与它一起被销毁。

      见:How to release or clear the value of variable or object?

      【讨论】:

        【解决方案4】:

        为此,您必须为整数类型的计数器创建静态变量。 On OnCreate 方法将变量递增 1 并在 OnDestroy() 方法上递减变量值。并在 OnDestroy() 方法上检查静态变量值是否为 0,如果为 0,则调用 web 服务清除会话

        【讨论】:

          【解决方案5】:

          我会使用 Activity 的 onDestroy() 方法检查用户是否正在终止应用程序或操作系统是否因为 isFinishing() 内存不足而终止进程的活动强>方法。要部署“销毁网络会话”逻辑,您可以启动一个 IntentService 来启动此操作。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-26
            • 1970-01-01
            相关资源
            最近更新 更多