我正在使用此代码来处理可能导致我的应用程序崩溃的任何未捕获的异常.
public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
public ExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
Toast.makeText(myContext,
"The application has crashed, and a report is sent to the admin",
Toast.LENGTH_SHORT).show();
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
System.err.println(stackTrace);// You can use LogCat too
Intent intent = new Intent(myContext, CrashActivity.class);
myContext.startActivity(intent);
Process.killProcess(Process.myPid());
System.exit(10);
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用已知但未捕获的异常(仅测试)运行它时,会调用活动"CrashActivity",但必须在它之前出现的Toast才会显示.
其实我只想显示Toast,然后调用myContext.finish(); 而不是去CrashActivity.但那种敬酒不可见.
我哪里错了?
正如标题所说,我的UncaughtExceptionHandler自定义应用程序类中有一个集合,在我的应用程序启动时被设置为默认值.
但是,虽然没有在文档中我读过你无法实例化Dialog使用MyApplication.this或getApplicationContext().当我尝试这样做时,我会得到一个
窗口管理器,$ BadTokenException ...
我需要另一种选择.我曾想过要做一个新的活动来弥补这一点,但宁愿让它成为一个AlertDialog.
有没有办法可以UncaughtExceptionHandler从MyApplication课堂内获得有效的上下文?
如果检测到未处理的异常,我正在尝试启动错误报告活动.问题是从主线程抛出的异常.如果主线程崩溃,有没有办法启动活动?