我在扩展应用程序的类中创建了一个自定义异常处理程序,使用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 的更好方法是什么?