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
相關文章
- GitHub下載慢的原因及解決方法Github
- Linux中產生zombie的原因詳解及解決方法!Linux
- 網站內頁不收錄的原因及解決方法網站
- 撥號VPS中691的可能原因及解決方法?
- axios傳送兩次請求原因及解決方法iOS
- mysql的ERROR 1231 (42000)問題原因及解決方法MySqlError
- node版本升級npm命令警告原因及解決方法NPM
- DNS故障的幾種常見原因及解決方法DNS
- 資料庫連線錯誤的原因及解決方法資料庫
- 資料庫連線失敗的原因及解決方法資料庫
- 技術分享 | DNS解析不生效的原因及解決方法DNS
- 伺服器自動重啟的原因及解決方法-VeCloud伺服器Cloud
- 程式碼簽名證書出錯的原因及解決方法
- 百度快照被劫持的原因及解決方法、百度快照劫持的解決方法全
- rundll32.exe程式佔用率CPU高的原因及解決方法
- 造成黏包的原因,及解決方案
- Laravel admin 使用者頭像顯示不出的原因及解決方法Laravel
- MySQL併發時經典常見的死鎖原因及解決方法MySql
- 郵件營銷容易成為垃圾郵件的原因及解決方法
- 恆創科技:網站401錯誤的常見原因及解決方法網站
- git did not exit cleanly(exit code 128)報錯的部分原因及解決方法Git
- 瞭解 Android ANRAndroid
- nodejs埠被佔用原因及解決方案NodeJS
- SpringBoot整合Redis亂碼原因及解決方案Spring BootRedis
- php png失真的原因及解決辦法PHP
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- No bean named 'xxx' is defined錯誤,原因及解決方案Bean
- 微信域名被封的原因及解決辦法
- 調節閥振動原因分析及解決方案
- Handler記憶體洩漏原因及解決方案記憶體
- Oracle的TNS-12502 錯誤原因及解決Oracle
- warning: LF will be replaced by CRLF in ** 的原因及解決辦法
- ORA-39006錯誤原因及解決辦法
- 家庭電氣火災原因分析及解決方案
- spring.jackson.date-format失效原因及解決方案SpringORM
- 電腦Hosts檔案修改後無法儲存的原因及解決方法教程
- 圖片下方三畫素原因及解決辦法
- mysql同步(複製)延遲的原因及解決方案MySql
- remount of /system failed: Read-only file system原因及解決REMAI