4

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

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

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

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

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

4

4 回答 4

3

使用下面的代码。

android.os.Process.killProcess(android.os.Process.myPid());
    System.runFinalizersOnExit(true);
于 2012-03-02T11:25:52.967 回答
3

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

System.exit(0);
于 2012-03-02T11:20:13.723 回答
0

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

根据我的说法,最好的解决方案是完成您应用中的所有活动,如下所示。

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

public static isQuit = false;

step2)在按钮的单击事件中将此变量设置为true。

 mainactivity.isQuit = true;

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

 @Override
      protected void onRestart() {
         // TODO Auto-generated method stub
         super.onRestart();
        if(mainactivity.isQuit)
            finish();
    }
于 2012-04-12T13:03:42.663 回答
-1

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

于 2012-03-02T11:41:24.177 回答