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