主动抓取crash,并处理下一个消息java
去掉ActivityThread类中处理消息的方法,避免黑屏ide
new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { while (true) { try { Looper.loop(); } catch (Exception e) { if (e instanceof QuitException) { //退出 return; } long realTime = SystemClock.elapsedRealtime(); if (mTime == 0) { mTime = realTime; } else { if (realTime - mTime < 1000) { mProxyCrashHandler.uncaughtException(Thread.currentThread(), e); } else { mTime = realTime; } } StackTraceElement[] stackTraceElement = e.getStackTrace(); for (StackTraceElement element : stackTraceElement) { //目前先过滤这部分,后续能够增长系统方面的,业务方面的到时候开接口出去 if ("ActivityThread.java".equals(element.getFileName()) && "handleMessage".equals(element.getMethodName())) { mProxyCrashHandler.uncaughtException(Thread.currentThread(), e); return; } } sendExceptionLog(e, ACTIVE_DEFENSE); } } } });