Android性能優化:ANR異常處理

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,只能說盡量避免吧!

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章