活动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。
我希望应用程序在发生“意外错误”或任何系统对话框时完全死亡,并且根本不重启。
请帮助,这让我疯狂。
答案 0 :(得分:0)
你可以通过自己来模仿这种行为。使用startActivityForResult
启动活动B,在活动B中设置setResult(RESULT_CANCELLED);
。如果您的活动有一个未应用的例外,您应该收到onActivityResult
。如果该结果仍然被取消,您可以完成您的活动并使用Intent开始一个新活动。如果在完成之前成功,则必须在活动B中设置另一个结果!