And*_*der 4 error-handling android crash-reports uncaught-exception
我有没有办法注册一个全局错误处理程序,以防止应用程序崩溃?此处描述了崩溃报告:如何从Android应用程序获取崩溃数据?.我有一个想法是扩展这些解决方案以接受应用程序上下文,以便可以重定向到特定的报告活动?但是一旦报告崩溃,不确定应用程序上下文是否在此时有效?
但是,当发生崩溃时,如何将用户重定向到全局错误消息Activity?是否有一些高级方法来注册错误处理程序,以捕获所有错误并防止崩溃?有没有办法注册这样的处理程序,以便它可以防止或幸免于崩溃,然后将用户重定向到一个特定的活动,这将显示有问题的错误消息?
这是我对错误处理程序的修改:
1)只需将applicationContext构造函数作为ctx 传递给构造函数
2)添加reportError(stackTrace)方法将控制转移到错误消息页面
private void reportError(String stackTrace){
Intent i = new Intent(ctx, DisplayErrorActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction("DISPLAY_ERROR_ACTIVITY");
Bundle b = new Bundle();
b.putString("STACKTRACE", stackTrace);
i.putExtras(b);
try{
Log.d("MyErrorHandler","reportError ctx="+ctx);
ctx.startActivity(i);
} catch (Exception e) {
Exception ex = e;
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
并reportError在下面打电话:
public void uncaughtException(Thread t, Throwable e) {
Log.d("MyUncoughtExceptionHandler", "uncoughtException ctx="+ctx);
String timestamp=getDateTime();
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
String stacktrace = result.toString();
printWriter.close();
String filename = timestamp + ".stacktrace";
Log.d("MyexceptionHanlder","UncoughtException: "+stacktrace);
if (localPath != null) {
writeToFile(stacktrace, filename);
}
if (url != null) {
sendToServer(stacktrace, filename);
}
reportError(stacktrace);
// defaultUEH.uncaughtException(t, e);
}
Run Code Online (Sandbox Code Playgroud)
如果我留下评论defaultUEH它显示通常的崩溃对话框.没有它 - 空白屏幕.日志表示ErrorMessageActivity强制关闭以及进程.
为了测试我在用线程注册错误处理程序之后立即在主活动的create方法中将除以零.如果我对此有一个try-catch阻止它不会崩溃,但全局错误处理程序似乎不会阻止崩溃.检查ctx,它似乎在调试器中有效.
| 归档时间: |
|
| 查看次数: |
9561 次 |
| 最近记录: |