我在使用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的首选方法是什么?
答案 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。