【问题标题】:uncaught exception relaunching the calling activity?未捕获的异常重新启动调用活动?
【发布时间】:2010-12-18 04:06:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-manifest


    【解决方案1】:

    我相信这是强制关闭的预期行为。用户会收到异常通知,当他们确认时,系统会尝试让他们尽可能接近当前状态,即最后一个有效的活动。

    我不确定为什么不需要这种行为,但您可能需要想出自己的方法来识别活动因崩溃而重新启动并立即在 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。这可以防止强制关闭对话框首先显示,因此您可以随心所欲。

    【讨论】:

    • 谢谢 Marya... 这不是 Android 应用程序的默认行为。如果您尝试任何示例应用程序并发生崩溃,应用程序将退出。我尝试在另一个简单的应用程序中模拟此案例,但它“完全”崩溃了。我正在寻找有关可能导致应用重新启动的指示。
    • 关于“为什么”,当活动重新启动时,应用程序处于错误状态,我不想在此时为我的所有活动处理代码中的无效状态。关闭应用并允许 acra/marketplace 为我报告异常似乎更好。
    • Mayra...谢谢.. 如果您使用 StartActivity,而不是使用 StartActivityForResult,则行为略有不同。无论如何,将继续清除其他异常。感谢您的见解。
    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2019-04-26
    • 2014-02-03
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多