Android:在运行时异常退出之前显示Toast

时间:2016-08-10 13:01:08

标签: android exception android-toast system.exit

我有一个像这样的全局excpetion处理程序的应用程序:

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);
    }
}

问题在于显示toast,应用程序冻结并等到system.exit()被调用然后应用程序退出。正如它在下面的引用问题中所注意到的那样,在显示toast后立即调用exit()会导致进程终止并且不会显示toast。

P.S。我已经阅读了thisthisthis,但没有一个能够找到解决方案。

1 个答案:

答案 0 :(得分:-1)

在onDestroy()中制作吐司。我认为这是好方法:)。

最佳regar