如何在Android应用崩溃时禁用弹出的警告框

4

我希望能够顺利处理崩溃问题,因此我会在出现未捕获的异常时重新启动应用程序,但总是会出现警报框:“很抱歉,xyz 已停止工作”。

以下是我用来处理未捕获异常的代码:

intent = PendingIntent.getActivity(this.getApplication().getBaseContext(), 0,
                new Intent(getIntent()), getIntent().getFlags());

        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread paramThread,
                    Throwable paramThrowable) {
                Log.e("Alert", "Lets See if it Works !!!");
        AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
                System.exit(0);

            }

首先发布您的代码。 - Haresh Chhelana
你可以使用“acra”库来实现这个功能,它可以在应用程序崩溃时提供用户定义的消息,并且您还将收到有关该崩溃的电子邮件。 - Ravi
@Ravi,我在我的应用程序中启用了ACRA和Crashlytics,但Crashlytics本身可以很好地报告崩溃,我只想让应用程序顺利重新启动。 - Harsh Middha
4个回答

1

代码:

public class BaseActivity extends Activity {
    @Override
    public void onCreate() {
        super.onCreate();

        final Thread.UncaughtExceptionHandler oldHandler =
            Thread.getDefaultUncaughtExceptionHandler();

        Thread.setDefaultUncaughtExceptionHandler(
            new Thread.UncaughtExceptionHandler() {
                @Override
                public void uncaughtException(
                    Thread paramThread,
                    Throwable paramThrowable
                ) {
                    //Do your own error handling here

                    if (oldHandler != null)
                        oldHandler.uncaughtException(
                            paramThread,
                            paramThrowable
                        ); //Delegates to Android's error handling
                    else
                        System.exit(2); //Prevents the service/app from freezing
                }
            });
    }
}

1
当你遇到“不幸地,xyz已停止工作”的情况时,请始终设置一些断点并正确调试代码。检查您的LOGCAT,您将找到应用程序崩溃时遇到的问题。谢谢!

只是以防我的应用程序崩溃,它应该自动重新启动,我想禁用在应用程序重新启动之前出现的警报框。 - Harsh Middha
正如其他评论中提到的那样,我也认为警告框是由系统完成的。更明确地说,当活动崩溃后,您是否仍然想要重新启动它?我有一个相关的链接供您参考。希望它能起作用! https://dev59.com/qnE85IYBdhLWcg3wpFEa - Shruti Dasgopal

0

提示是系统完成的,你不能做太多事情。

当它被抛出时,你应该捕获异常,然后让你的应用程序根据情况继续执行。每次出现异常就重启应用程序是非常不顺畅的。


我也不想看到那个警告框“很遗憾,您的应用程序已停止工作” - Harsh Middha
这是因为你没有正确捕获异常。找出抛出异常的位置并捕获它们。这样你的应用程序就不会崩溃,警告框也不会显示。 - Thorben
这对我来说并不是这样。我有一个基于亭子的root设备,我需要在APK更新期间抑制消息。您有任何指针可以抑制/更改系统对话框吗? - Charlie

0
           @Override
           public void uncaughtException(Thread paramThread,
                           Throwable paramThrowable) {
                   Log.e("Alert", "Restarting app !!!");
                   Intent intent = getBaseContext().getPackageManager()
                        .getLaunchIntentForPackage( getBaseContext().getPac
           //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
           intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTI
           startActivity(intent);
           System.exit(2);
           }
   });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接