一.前期基礎知識儲備
traces.txt系統自動生成的記錄anr等異常的文件,只記錄java代碼產生的異常。
如果是舊版本(Android Studio3以下的版本)的AS,可以直接通過DDMS的File Explorer直接導出來:
之上的AS由於移除了DDMS,所以需要其他的方法獲取該文件。
二.上實例分析
筆者在項目中出現了一個ANR,信息如下:
06-01 14:55:29.473 973-1030/? E/ActivityManager: ANR in com.znv.linkup (com.znv.linkup/.WelcomeActivity)
PID: 9306
Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 2. Wait queue head age: 17784.3ms.)
具體表現爲停在應用首頁一段時間後,點擊首頁按鈕,卡頓然後會彈出ANR的提示。可以看到出問題的是WelcomeActivity,接着導出traces.txt文件具體定位到出問題的地方。
1)我們先跳轉到Android/SDK/platform-tools的所在目錄下,crtl + shift + 左鍵 選擇在這裏打開cmd窗口
2)然後輸入 adb shell
3)輸入 cd data/anr 跳轉到anr目錄
4)輸入 ls 查看所有文件
5)Ctrl+D 先退出
6)最後輸入 adb pull /data/anr/traces.txt 將文件保存到tools目錄下
具體操作如下圖:
然後再打開traces.txt文件,找到裏面WelcomeActivity相關的地方,也就是自己代碼相關的地方。如下:
由上圖,我們知道是由於WelcomeActivity內的動畫操作不當引起的ANR錯誤。