android CrashHandler

来源:互联网 发布:网络出版服务规定 编辑:程序博客网 时间:2024/06/05 09:39
Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getAppContext()));
public class CrashHandler implements Thread.UncaughtExceptionHandler {    public static final int MAX_CRASH_LOG_LENGTH = 5000;    private Context mAppContext;    private Thread.UncaughtExceptionHandler mDefaultHandler;    public CrashHandler(Context appContext) {        mAppContext = appContext;        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();    }    @Override    public void uncaughtException(Thread thread, Throwable ex) {        if (ex == null) {            return;        }        ex.printStackTrace();        Writer result = new StringWriter();        PrintWriter printWriter = new PrintWriter(result);        ex.printStackTrace(printWriter);        String callStack = result.toString();        if (callStack.length() > MAX_CRASH_LOG_LENGTH) {            callStack = callStack.substring(0, MAX_CRASH_LOG_LENGTH);        }        String exceptionClass = (ex == null) ? "" : ex.getStackTrace()[0].getClassName();        String exceptionMethod = (ex == null) ? "" : ex.getStackTrace()[0].getMethodName();        final List<KeyValuePair> params = new ArrayList<>();        final Object syncLock = new Object();        Runnable runnable = new Runnable() {            @Override            public void run() {                okhttp3.Request okRequest = new okhttp3.Request.Builder()                        .url(url)                        .post(KeyValuePairUtil.getRequestBody(params))                        .build();                Call call = getOkHttpClient().newCall(okRequest);                call.enqueue(new Callback() {                    @Override                    public void onFailure(Call call, IOException e) {                        synchronized (syncLock) {                            syncLock.notify();                        }                    }                    @Override                    public void onResponse(Call call, Response response) throws IOException {                        synchronized (syncLock) {                            syncLock.notify();                        }                    }                });            }        };        if (Looper.myLooper() == null) {            mUiHandler.post(runnable);        } else {            runnable.run();        }        synchronized (syncLock) {            try {                syncLock.wait();            } catch (InterruptedException e) {            }        }        if (mDefaultHandler != null) {            mDefaultHandler.uncaughtException(thread, ex);        }    }}
0 0
原创粉丝点击