未被捕获的异常重新启动调用活动?

时间:2010-12-16 23:55:22

标签: android android-manifest

我有一个大型Android应用程序,最近我看到在任何未捕获的异常中,异常显示在DDMS Logcat中,然后调用父活动重新启动(onCreate get被调用)。理想情况下,应用程序应该退出。

我们正在使用ARCA崩溃应用程序报告,但已注释掉并仍然看到相同的活动重新启动。我正在调用startActivityForResults,并且android清单的android:finishOnTaskLaunch为活动以及子活动都是true。

关于什么可能导致活动重新启动异常的任何指针?

1 个答案:

答案 0 :(得分:2)

我相信这是力量关闭的预期行为。当用户确认异常时系统试图尽可能地将它们恢复到当前状态,即最后一个有效的活动时,用户会得到异常的通知。

我不确定为什么不希望出现这种行为,但您可能需要提出自己的方法来识别由于崩溃而重新启动活动并立即退出onCreate。

编辑: 我刚刚整理了一个测试应用程序:

public class Activity1 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button)findViewById(R.id.button);
        button.setText("test");
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Activity1.this, Activity2.class);
                startActivityForResult(intent, 0);
            }
        });
    }
}

public class Activity2 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button button = (Button)findViewById(R.id.button);
        button.setText("test2");
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                throw new RuntimeException();
            }
        });
    }
}

在Test2中按下按钮时,抛出异常。 Android显示强制关闭对话框,当您在对话框中单击“确定”时,它会将您带回“测试”。这就是我所说的默认行为。

处理此问题的最佳方法是修复您的应用,以免它引发异常。

作为最后的手段,您可以添加处理未捕获的异常的处理程序:uncaughtExceptionHandler。这可以防止强制关闭对话框首先显示,因此您可以按照自己的意愿进行操作。