0

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

下面的方法创建了一个 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 的更好方法是什么?

4

1 回答 1

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);
    }
});

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

于 2013-08-04T22:00:04.040 回答