Android程序無響應(ANR)日誌抓取

1. 什麼是ANR

ANR,英文全稱Application Not Responding,中文釋義爲應用程序無響應。當應用程序有一段時間響應不夠靈敏時,系統會向用戶展示一個對話框,用戶可以選擇”等待“讓程序繼續運行,或選擇“關閉應用”來強制關閉應用。

一個流暢的合理的應用程序中不能出現ANR,ANR會導致用戶體驗變差。默認情況下,在Android中Activity的最長執行時間是5秒,BroadcastReceiver的最長執行時間則是10秒。

在這裏插入圖片描述

2. 爲什麼會出現ANR

在Andorid系統中,通過Activity Manager和Window Manager服務來監控應用程序的響應情況,如果應用程序響應時間超出了限定時間,爲了避免對用戶體驗造成困擾,系統會彈出ANR對話框來讓用戶選擇是否繼續等待。

出現應用程序響應時間超出限定時間主要有以下幾種情況

  • 主線程阻塞

    在主線程中執行了大量耗時的操作,比如網絡請求(現在會拋出網絡請求不能放在主線程的異常),從數據庫中讀取大量數據,線程長時間休眠。

  • CPU滿負荷工作時進行I/0操作

    當CPU滿負荷工作時,如果APP仍舊進行一些I/O操作,會導致ANR

  • 內存不足

    系統分配給每個應用程序的內存空間是一定的,如果APP中發生內存泄露等,會導致ANR

3. ANR日誌抓取

當應用程序發生ANR後,系統會在data/anr/目錄下生成一個traces.txt文件,文件內記錄了ANR產生時的一些系統信息,我們可以通過使用adb命令來將文件導出至本地。

在導出之前,我們可以先查看下設備ANR日誌是否存在

在這裏插入圖片描述

使用如下命令來將ANR日誌導出

adb pull data/anr/traces.txt 導出後的路徑

例如:
在這裏插入圖片描述

然後我們打開traces.txt進行分析
在這裏插入圖片描述


歡迎關注微信公衆號&新浪微博,一起交流,共同成長。

在這裏插入圖片描述



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