为了账号安全,请及时绑定邮箱和手机立即绑定

在Android上使用全局异常处理

在Android上使用全局异常处理

慕田峪9158850 2019-11-28 09:59:43
是否有代码示例,或有关如何使用该Thread.setDefaultUncaughtExceptionHandler方法的教程?基本上,无论何时抛出异常,我都试图在应用程序中显示自定义警报对话框。是否有可能做到这一点?我知道,如果在UI线程中引发了异常,则在屏幕上显示某些内容会有些棘手,但是我不知道有任何解决方法。
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

带有解决方案来到此页面的人的基本示例:)


public class ChildActivity extends BaseActivity {

    @SuppressWarnings("unused")

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        int a=1/0;

    }

}

处理错误的类:


public class BaseActivity extends Activity{

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

            @Override

            public void uncaughtException(Thread paramThread, Throwable paramThrowable) {

                Log.e("Alert","Lets See if it Works !!!");

            }

        });

    }

}


查看完整回答
反对 回复 2019-11-28
?
白衣非少年

TA贡献1155条经验 获得超0个赞

这里的一个变种,答案由莫特·沙玛有以下改进:


错误处理后不会导致应用/服务冻结

让Android在您自己完成之后进行正常的错误处理

码:


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

                }

            });

    }

}


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 503 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信