Closed jeffery812 closed 7 years ago
handlerException里面是否可以用RxAndroid实现,这样如果有耗时操作也可以做了:
Cockroach.install(new Cockroach.ExceptionHandler() { // handlerException内部建议手动try{ 你的异常处理逻辑 }catch(Throwable e){ } ,以防handlerException内部再次抛出异常,导致循环调用handlerException @Override public void handlerException(final Thread thread, final Throwable throwable) { //开发时使用Cockroach可能不容易发现bug,所以建议开发阶段在handlerException中用Toast谈个提示框, Observable.just(throwable) .subscribeOn(Schedulers.io()) .map(new Func1<Throwable, Throwable>() { @Override public Throwable call(Throwable throwable) { /** * 如果有,耗时操作可以放在这里 */ return throwable; } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Throwable>() { @Override public void call(Throwable throwable) { try { //建议使用下面方式在控制台打印异常,这样就可以在Error级别看到红色log Log.e("AndroidRuntime","--->CockroachException:"+thread+"<---",throwable); Toast.makeText(MyApplication.this, "Exception Happend\n" + thread + "\n" + throwable.toString(), Toast.LENGTH_SHORT).show(); // throw new RuntimeException("..."+(i++)); } catch (Throwable e) { Log.e("AndroidRuntime","--->CockroachException:"+thread+"<---",e); } } }); } });
in gradle:
compile 'io.reactivex:rxandroid:1.2.1' compile 'io.reactivex:rxjava:1.1.6'
handlerException里面用什么没影响,只是handlerException可能运行在子线程也可能运行在主线程,若在主线程的话就不要做耗时操作,若在子线程的话就不要更新ui,另外如果用第三方库的话要保证如果第三方库出了异常一定能从handlerException中的try catch中捕获到,不然可能会导致一直不停调用handlerException,虽然不会导致栈溢出和ANR,但尽量避免。
handlerException里面是否可以用RxAndroid实现,这样如果有耗时操作也可以做了:
in gradle: