实现回调以避免强制关闭,同时报告崩溃并显示支持屏幕

时间:2018-11-05 09:25:05

标签: java android bugsnag

我想向用户显示带有支持信息的活动,而不是强制关闭对话框,同时将错误信息发送给bugsnag。我遵循了此建议(https://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android/)来为未捕​​获的异常设置处理程序。使用bugsnag.notify向bugsnag报告显然需要一些时间,所以我认为我需要AsyncTask来显示“支持活动”并发送通知。该过程必须在完成后才被终止。 AFAIK,AsyncTask的问题是当放入帮助器类时无法更新UI线程。那么如何确定错误已报告给busgnag,显示了“支持活动”并随后终止了该过程?

MainActivity.java中的代码

Bugsnag.init(this);
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

ExceptionHandler.java

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import com.bugsnag.android.Bugsnag;

public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
    private final Activity myContext;

    public ExceptionHandler(Activity context) {
        myContext = context;
    }

    public void uncaughtException(Thread thread, Throwable exception) {
        new ReportCrashTask().execute();
    }

    private class ReportCrashTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            Intent intent = new Intent(myContext, CrashActivity.class);
            myContext.startActivity(intent);

            Bugsnag.notify(new RuntimeException("Test error"));
            return "done";
        }

        @Override
        protected void onPostExecute(String aVoid) {
            super.onPostExecute(aVoid);
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(10);
        }
    }
}

0 个答案:

没有答案