0
我有一个全球性错误时抛出的处理程序的应用程序像在此之前显示敬酒:安卓:运行时异常退出
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
}
}
我想避免显示力贴近用户,并显示用户友好的敬酒像“出事了。 ..“。 这里是异常处理类:
public class ExceptionHandler implements
Thread.UncaughtExceptionHandler {
private final Context myContext;
private final String LINE_SEPARATOR = "\n";
public ExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
StringBuilder errorReport = new StringBuilder();
errorReport.append("************ CAUSE OF ERROR ************\n\n");
errorReport.append(stackTrace.toString());
Log.e("ERROR_TAG", errorReport.toString());
Utils.showShortToast(R.string.something_went_wrong, myContext);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
},1000);
}
}
的问题是,当涉及到显示敬酒,申请冻结,等到System.exit()的调用,然后应用程序退出。正如它在引用下面的问题时注意到的,在显示吐司后立即调用exit()会导致进程kill,并且不会显示吐司。
P.S.我读过this,this和this但他们都没有找到解决办法。
为什么你正在退出应用程序的问题。处理exeptions应该处理它不杀应用程序,创建一些ErrorActivty并在那里赶上。你正在做与标准的android异常相同的功能 - 杀应用程序,我没有注意到这种想法的目的。 –
@MaciejSikora即使试图处理所有异常,也可能发生这样的情况,即由于不同的原因(开发人员错误,开发人员缺乏知识,不同操作系统和平台的广泛变化)而未捕获其中的一些异常。所以我只是想避免显示用户着名的“强制关闭..”窗口并保存错误日志以查明问题并在将来处理未捕获的异常。这是原因! :) – VSB
应用程序错误不是小宠物,解决他们不抓住他们:)。改变思维方式。 –