ANR原因及解決方法
一、什麼是ANR
ANR: Application not responding (應用無響應),系統會向使用者顯示一個對話方塊,使用者可以選擇“等待”而讓程式繼續執行,也可以選擇“強制關閉”
二、ANR的型別
1、keyDispatchTimeout(5s) -- 主要型別
按鍵或觸控事件在特定時間內無響應(按鍵按下、螢幕觸控等)
2、BroadcastTimeout(10 seconds)
BroadcastReceiver在特定時間內無法處理完成
3、ServiceTimeout(20 seconds) -- 小概率型別
Service在特定的時間內無法處理完成
三、如何分析ANR
ANR產生的原因是要有輸入事件,若使用者沒有輸入任何事件,即使主執行緒阻塞了,也不會ANR,因為InputDispatcher沒有分發事件給應用程式,當然也不會檢測處理超時和報告ANR了
1)ANR發生時都會在log中輸出錯誤資訊,從log中可以獲得ANR的型別,CPU的使用情況:
CPU使用率過高有可能是CPU飢餓導致了ANR;
CPU使用率過低說明主執行緒被block了;
如果IOwait高是因為主執行緒進行I/O操作造成的。
2)除了看LOG,還可以從trace.txt檔案檢視呼叫stack。可以用如下命令獲取trace.txt
$chmod 777 /data/anr
$rm /data/anr/traces.txt
$ps
$kill -3 PID
adbpull data/anr/traces.txt ./mytraces.txt
四、如何避免ANR
(1)避免在主執行緒上進行復雜耗時的操作,比如說傳送接收網路資料/進行大量計算/運算元據庫/讀寫檔案等。這個可以通過使用AsyncTask或者使用多執行緒來實現。
(2)broadCastReceiver 要進行復雜操作的的時候,可以在onReceive()方法中啟動一個Service來處理
(3)在設計及程式碼編寫階段避免出現出現同步/死鎖或者錯誤處理不恰當等情況。
總結
主執行緒阻塞/掛起、死迴圈、記憶體洩漏、執行耗時操作、記憶體過大、CPU佔用過高(檔案讀寫頻繁)都會造成crash
參考文件:如何分析解決Android ANR
相關文章
- [轉]Android ANR 分析解決方法Android
- DVR常見故障原因及解決方法VR
- Windows變慢原因分析及解決方法(轉)Windows
- android ANR產生原因和解決辦法Android
- No input file specified 出現的原因及解決方法
- 網站內頁不收錄的原因及解決方法網站
- node版本升級npm命令警告原因及解決方法NPM
- DNS故障的幾種常見原因及解決方法DNS
- impdp操作產生大量UNDO的原因及解決方法
- CPU佔用100%原因及解決方法 轉載
- Linux中產生zombie的原因詳解及解決方法!Linux
- 撥號VPS中691的可能原因及解決方法?
- axios傳送兩次請求原因及解決方法iOS
- 技術分享 | DNS解析不生效的原因及解決方法DNS
- u盤複製速度慢的原因及解決方法
- 伺服器自動重啟的原因及解決方法-VeCloud伺服器Cloud
- 程式碼簽名證書出錯的原因及解決方法
- 區域網內網速度慢的原因及解決方法內網
- 關於java中空指標異常的原因及解決方法Java指標
- ORA-01578 壞塊原因模擬及解決方法
- 百度快照被劫持的原因及解決方法、百度快照劫持的解決方法全
- rundll32.exe程式佔用率CPU高的原因及解決方法
- 深入探討ORA-04031的產生原因及解決方法
- 造成黏包的原因,及解決方案
- computer browser關閉原因解決方法
- MySQL併發時經典常見的死鎖原因及解決方法MySql
- 郵件營銷容易成為垃圾郵件的原因及解決方法
- /var/spool/clientmqueue/目錄下存在大量檔案的原因及解決方法clientMQ
- 微信域名被封的原因及解決辦法
- php png失真的原因及解決辦法PHP
- PDF複製亂碼 -- 原因及解決方案
- Laravel admin 使用者頭像顯示不出的原因及解決方法Laravel
- 恆創科技:網站401錯誤的常見原因及解決方法網站
- ORACLE臨時表空間使用率過高的原因及解決方法Oracle
- Win10系統下無法識別硬碟的原因及解決方法Win10硬碟
- 查詢分析器不能單步除錯的的原因及解決方法除錯
- mysqldump意外終止的原因以及解決方法MySql
- ORA-04031 的原因分析解決方法