ANR(Application Not Responding)應用程序無響應
導致ANR異常的原因很多:
InputDispatching Timeout:5秒內無法響應屏幕觸摸事件或鍵盤輸入事件
BroadcastQueue Timeout :在執行前臺廣播(BroadcastReceiver)的onReceive()函數時10秒沒有處理完成,後臺爲60秒
Service Timeout :前臺服務20秒內,後臺服務在200秒內沒有執行完畢
ContentProvider Timeout :ContentProvider的publish在10s內沒進行完 (以上四條是複製網上總結,感覺總結很到位)
相信大家在開發中偶爾也會碰到此類問題,此文章重點介紹如何追蹤查找錯誤
製造ANR
非常簡單,一個頁面兩個按鈕設置點擊事件,一個調用Thread.sleep(50000),另一個點擊修改頁面佈局
ANR追蹤分析
1,AndroidStudio Logcat查看
通過查看Logcat的方法只能看一個大概,告訴你主線程等待異常;
2,traces.txt
app每次出現anr異常,系統都會記錄到手機的traces.txt文件中,所以,出現anr可通過查看traces.txt追蹤異常;
對adb不瞭解的可先看下Android adb shell 常用命令https://www.cnblogs.com/abeam/p/8908225.html
配置好adb以後查找traces.txt文件(聲明:不需要root)
window + R ,輸入cmd 打開命令窗口:
①adb shell (鏈接設備)
②cd /data/anr (進入/data/anr目錄下)
③ls (查看當前目錄下文件)
④ctrl + d 退出
⑤adb pull data/anr/traces.txt c:\anr (可將文件導入到c盤anr文件中,如果出現以下異常,需按照另外一種辦法解決)
出現這種異常需使用另外一個命令導出
//6.0及以下設備
adb bugreport > bugreport.txt
//7.0及以上設備
adb bugreport bugreport.zip
壓縮成功,可以先查看以下,然後導出:
然後到電腦C盤anr文件夾中解壓壓縮包,找到 FS文件夾 ----> data文件夾 ----> anr文件夾
打開查找anr異常
可精準定位到異常;
其實造成ANR異常的原因很多,主線程阻塞,CPU滿負荷,內存不足,還有上面說的各大組件ANR,只能說盡量避免吧!