当子活动抛出未捕获的异常时,如何让进程死亡

时间:2013-11-06 16:39:19

标签: android

活动A启动子活动B,如果B因未捕获的异常而失败,则会关闭,Android系统会在新进程中启动父活动A。现在,如果父活动以新状态开始但事实并非如此,那么一切都会好的。即使这是一个新的过程,活动的状态也会以某种方式恢复。这导致了很多问题。

阅读类似的问题,这是我到目前为止所尝试的:

在儿童活动中:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandle() {
        public void uncaughtException(Thread thread, Throwable ex) {
            // replacing the following 5 with just finish() doesn't help
            // either because then the screen just goes all black
            final Intent rootActivity = new Intent(getApplicationContext(), RootActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(rootActivity);
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(0);
            return;
        }
    };
    ...
    ...
    ...
}

我尝试的其他事情是为父活动设置android:multiProcess="false" ...不会改变任何内容。

Android系统仍然启动父活动(在新进程中)并执行onRestoreInstance。

我希望应用程序在发生“意外错误”或任何系统对话框时完全死亡,并且根本不重启。

请帮助,这让我疯狂。

1 个答案:

答案 0 :(得分:0)

你可以通过自己来模仿这种行为。使用startActivityForResult启动活动B,在活动B中设置setResult(RESULT_CANCELLED);。如果您的活动有一个未应用的例外,您应该收到onActivityResult。如果该结果仍然被取消,您可以完成您的活动并使用Intent开始一个新活动。如果在完成之前成功,则必须在活动B中设置另一个结果!