一:前言
最近發現好多人不會從日志中找到ANR的解決方法, 在此分享一個小技巧。
想必ANR(應用程序無響應)大家都遇到過,大概有以下情況會發生:
1. dispatchTimeout輸入事件分發超時,一般是主線程在5秒之內沒有響應事件。
2. BroadcastTimeout廣播超時,一般為廣播在10秒內未能執行完畢。
3. ServiceTimeout服務超時,一般為服務在20秒內未能執行完畢。
其實無非就是不要在主線程中做耗時操作,比如:網絡請求,數據庫操作什么的,寫代碼的時候注意一下就可以大大的避免ANR發生。
二:輸出日志
如果在發生ANR時手機沒有連接着AS的話, 可以用這種辦法取到ANR日志,技巧如下:
1. 打開CMD小黑框,進入到Android SDK 目錄下的platform-tools文件夾下面直接輸出 : adb logcat (不會進的自行百度) 復制粘貼到一個txt文本下,方便稍后查看。
2. 執行adb pull /data/anr/traces.txt D:\traces.txt 輸出traces日志。
三:分析日志
1. 先看logcat輸出的日志
查看未果,不要浪費時間, 我們接着看trace 日志, 看看能不能找到答案。
四:總結
其實anr並不難解決,通過分析日志基本就可以找到答案,如果你也遇到了anr那么嘗試用這種辦法解決試試, 看看能不能解決你的問題, 最主要的還是在寫代碼的時候多加注意,主線程只做刷新Ui的操作, 把一切耗時的操作都放在子線程里去完成,盡量從根源上避免ANR發生, 最后在這祝大家: 事業順利,上線無BUG!