一、前言:
卓APP一旦發(fā)生任何報(bào)錯(cuò),就會(huì)停止運(yùn)行,這是令許多開發(fā)者頭疼的問題,
很多情況下,一些隱性BUG在測(cè)試部門通過,而在上架之后發(fā)生小面積崩潰,這時(shí)候的報(bào)錯(cuò)因?yàn)闆]有日志,導(dǎo)致BUG無從查起。
那么,只能通過用戶反饋消耗大量的人力和時(shí)間去復(fù)現(xiàn)它嗎?
二、解決:
其實(shí)只要在Application中插入一小段代碼,就可以把完整的錯(cuò)誤日志全部捕捉出來:
//記錄崩潰信息
final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
//獲取崩潰時(shí)的UNIX時(shí)間戳
long timeMillis = System.currentTimeMillis();
//將時(shí)間戳轉(zhuǎn)換成人類能看懂的格式,建立一個(gè)String拼接器
StringBuilder stringBuilder = new StringBuilder(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date(timeMillis)));
stringBuilder.append(":\n");
//獲取錯(cuò)誤信息
stringBuilder.append(throwable.getMessage());
stringBuilder.append("\n");
//獲取堆棧信息
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
throwable.printStackTrace(pw);
stringBuilder.append(sw.toString());
//這就是完整的錯(cuò)誤信息了,你可以拿來上傳服務(wù)器,或者做成本地文件保存等等等等
String errorLog = stringBuilder.toString();
//最后如何處理這個(gè)崩潰,這里使用默認(rèn)的處理方式讓APP停止運(yùn)行
defaultHandler.uncaughtException(thread, throwable);
}
});
參考鏈接:https://blog.csdn.net/u014653815/article/details/81363869