显示自定义异常错误弹出窗口

时间:2013-07-16 15:18:10

标签: java exception-handling android uncaughtexceptionhandler

我在使用Thread.setDefaultUncaughtExceptionHandler扩展Application的类中创建了一个自定义异常处理程序,以将未捕获的异常堆栈跟踪打印到文件中。我希望它还向用户显示自定义错误弹出窗口,而不是默认的“不幸的是,[应用程序]已停止”消息。

以下方法创建一个AlertDialog,在单击时返回主菜单。它甚至可以在后台线程上运行。

void alert(final String msg) {
    final Activity activity = (Activity) getContext();
    activity.runOnUiThread(new Runnable() {
        public void run() {
            new AlertDialog.Builder(activity)
            .setCancelable(false)
            .setMessage(msg)
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    activity.startActivity(new Intent(activity, MainMenu.class));
                }
            })
            .show();
        }
    });
}

但是,AlertDialog要求知道当前活动。要将此方法与异常处理程序一起使用,我可以保留指向Application类中当前活动的指针,该指针在每个Activity的onResume()方法中重置,但我担心泄漏内存。

当抛出未捕获的异常时,启动AlertDialog的首选方法是什么?

1 个答案:

答案 0 :(得分:0)

要获取默认错误弹出窗口,请处理异常,然后执行默认的未捕获异常处理程序:

final Thread.UncaughtExceptionHandler defaultHandler = 
    Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        doCustomHandlingHere();
        defaultHandler.uncaughtException(t,e);
    }
});

要获取自定义错误弹出窗口,我相信您必须分别为每个活动设置默认的未捕获异常处理程序。有关详细信息,请参阅this post