退出Android应用程序的最佳方法?

时间:2012-03-02 11:17:27

标签: android quit

我正在寻找一种通过代码退出我的Android应用程序的方法。 是的,我知道,我不应该这样做,因为当你按下后退按钮时android会处理它,但我有一个自定义流程迫使我实现它。我已经搜索了一段时间,并找到了多个答案:

  • 不应该这样做=>没有选择。
  • 在我的活动中调用finish()=>仅适用于1个活动,而不是整个应用程序。
  • 使用特殊标志=>启动对第一个活动的意图我有多个入口点,所以不是一个选项。
  • 只是杀了我自己的进程=>不确定这个,这会在所有活动中调用onDestroy()方法吗?我的后台服务会继续运行吗? (不应该停止)

所以我想知道,还有其他选择退出我的应用程序,还是我真的只限于这些选项? 如果确实没有其他选项,那么我正在考虑在我的Application类中创建我的所有活动实例的列表,然后循环它们以在它们上调用finish()。但我不知道这是否是处理这个问题的正确方法。

这就是为什么我在这里问我的问题,这是关闭我的应用程序的最佳方式?

编辑:我或多或少地解决了这个问题。我有一份我的活动的WeakReference列表。在每个onCreate中,我将活动添加到列表中。然后,当我想退出我的应用程序时,我只需循环列表并调用finish()。问题是:如果列表太大,它将无法完成我的所有活动,因为android已经销毁了它们。因此,每当我确定我不再需要它们时,我就完成了它们。在我的情况下,列表不能超过3/4活动,所以不再需要担心活动没有完成。同样使用这种方法,我不必破坏我自己的过程。

4 个答案:

答案 0 :(得分:3)

你不应该这样做,但无论如何,如果你坚持:

System.exit(0);

答案 1 :(得分:3)

使用下面的代码。

android.os.Process.killProcess(android.os.Process.myPid());
    System.runFinalizersOnExit(true);

答案 2 :(得分:0)

不推荐,但你仍然可以使用它。如果您需要退出应用程序,最好使用此解决方案。

据我所知,最好的解决方案是完成你的应用中的每项活动,如下所示。

step1)在mainactivity中维护一个静态变量。

public static isQuit = false;

step2)对按钮的单击事件使该变量为真。

 mainactivity.isQuit = true;

step3)在你的应用程序的每个活动中都有onrestart方法如下..

 @Override
      protected void onRestart() {
         // TODO Auto-generated method stub
         super.onRestart();
        if(mainactivity.isQuit)
            finish();
    }

答案 3 :(得分:-1)

您可以在List中保留所有已启动活动的列表(使用WeakReference以避免内存泄漏)。要退出应用程序,首先在每个项目上调用finish方法,然后调用android.os.Process.killProcess(android.os.Process.myPid());