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

Java 显示自定义异常错误弹出窗口,java,exception-handling,android,uncaughtexceptionhandler,Java,Exception Handling,Android,Uncaughtexceptionhandler,我在类扩展应用程序中创建了一个自定义异常处理程序,使用Thread.setDefaultUncaughtExceptionHandler,将未捕获异常的堆栈跟踪打印到文件中。我希望它还向用户显示一个自定义错误弹出窗口,而不是默认的“不幸,[应用程序]已停止”消息 以下方法创建一个AlertDialog,单击该对话框时返回主菜单。它甚至可以在后台线程上运行 void alert(final String msg) { final Activity activity = (Activity)

我在类扩展应用程序中创建了一个自定义异常处理程序,使用
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要求知道当前活动。要在异常处理程序中使用此方法,我可以在应用程序类中保留一个指向当前活动的指针,该指针在每个活动的
onResume()
方法中重置,但我担心内存泄漏

当引发未捕获异常时,最好用什么方法打开AlertDialog?

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

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

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

如果您正在考虑替换默认ANR屏幕-否。我认为这与@chancea相关,谢谢链接,但这些解决方案似乎需要后台服务作为上下文,而不是活动。@Shark这不是应用程序无响应屏幕,出现异常时会出现屏幕。链接未打开?如何添加自定义对话框?