參考:https://www.jianshu.com/p/644078912cfd?from=singlemessage
碼字辛苦!轉載請注明出處!
安卓APP一旦發生任何報錯,就會停止運行,這是令許多開發者頭疼的問題,
很多情況下,一些隱性BUG在測試部門通過,而在上架之后發生小面積崩潰,這時候的報錯因為沒有日志,導致BUG無從查起。
那么,只能通過用戶反饋消耗大量的人力和時間去復現它嗎?

其實只要在Application中插入一小段代碼,就可以把完整的錯誤日志全部捕捉出來:
//記錄崩潰信息
final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
//獲取崩潰時的UNIX時間戳
long timeMillis = System.currentTimeMillis();
//將時間戳轉換成人類能看懂的格式,建立一個String拼接器
StringBuilder stringBuilder = new StringBuilder(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date(timeMillis)));
stringBuilder.append(":\n");
//獲取錯誤信息
stringBuilder.append(throwable.getMessage());
stringBuilder.append("\n");
//獲取堆棧信息
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
throwable.printStackTrace(pw);
stringBuilder.append(sw.toString());
//這就是完整的錯誤信息了,你可以拿來上傳服務器,或者做成本地文件保存等等等等
String errorLog = stringBuilder.toString();
//最后如何處理這個崩潰,這里使用默認的處理方式讓APP停止運行
defaultHandler.uncaughtException(thread, throwable);
}
});
各位有自我修養的工程師們還不快get√起來~