Android中的ANR簡述
ANR是Application Not responding,指應用程式未響應,Android系統如果超過預定時間未能得到有效響應或者響應時間過長,都會造成ANR,因為Android系統對於一些事件需要在一定的時間範圍內完成。ANR由訊息處理機制保證, 核心原理是訊息排程和超時處理,Android在系統層實現了一套精密的機制來發現ANR。
ANR本質上其實是一個效能的問題,它要求主執行緒在規定的時間內完成一些操作,如果處理超時,則會認為主執行緒失去了響應其他操作的努力,主執行緒的耗時操作,都會降低應用程式的響應能力
ANR機制主體實現在系統層,系統程式設計了不同的超時限制來跟蹤訊息的處理。所有與ANR相關的訊息,都會經過系統程式排程,然後派發到應用程式完成對訊息的實際處理。 一旦應用程式處理訊息不當,超時限制就起作用了,它會收集一些類似CUP使用情況等資訊並報告使用者程式無響應情況
檢測ANR的核心是訊息排程和超時處理
而在應用中基本上只有四種情況會導致ANR
-
Service Timeout:Service在特定的時間內無法處理完成
-
BroadcastQueue Timeout:BroadcastReceiver在特定時間內無法處理完成
-
ContentProvider Timeout:內容提供者執行超時
-
inputDispatching Timeout: 按鍵或觸控事件在特定時間內無響應。
而整個ANR機制可以分為:ANR檢測機制和ANR報告機制
Service檢測機制
在ANR機制中,Service執行在應用程式的主執行緒,如果Service的執行時間超過20秒,就會引發ANR。
Android是透過設定定時訊息實現監測Service超時的。定時訊息是由AMS的訊息佇列處理的(system_server的ActivityManager執行緒)。 AMS有Service執行的上下文資訊,所以會在AMS中設定一套超時檢測機制
輸入事件檢測機制
應用程式可以接收輸入事件(按鍵、觸屏、軌跡球等),當5秒內沒有處理完畢時,則會引發ANR。
ANR報告機制
無論哪種型別的ANR發生以後,最終都會呼叫AppErrors.appNotResponding()方法,想使用者或者開發者報告發生ANR了,表現為彈出提示框,提示使用者該程式無法響應,列印相關日誌
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2690614/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 瞭解 Android ANRAndroid
- Android Studio中引入Gson依賴(簡述版)Android
- Android適配:DP簡述Android
- Android ANR日誌分析指南Android
- Android學習筆記·ANRAndroid筆記
- 教你如何 分析 Android ANR 問題Android
- 簡述java中casJava
- 【系統之音】Android程式的建立及啟動簡述Android
- Android-ANR總結及日誌分析Android
- ANR的分析
- ANR
- Dojo簡述
- CNN 簡述CNN
- Android中Lottie的簡單使用Android
- 簡述對Vuex的理解Vue
- Android中SharePreferences的簡單實現Android
- 文字摘要簡述
- Angular框架簡述Angular框架
- CMN簡述 --20240305
- 轉移簡述
- DES加密簡述加密
- Spring MVC 簡述SpringMVC
- ViT簡述【Transformer】ORM
- Java代理簡述Java
- Web 開發中 Blob 與 FileAPI 使用簡述WebAPI
- Flutter的繪製流程簡述Flutter
- Task Manager 的設計簡述
- 簡述SSL證書的作用
- 簡述React的生命週期React
- 簡述 Laravel Model Events 的使用Laravel
- 簡述Python類中的 __init__、__new__、__call__ 方法Python
- 簡述網站建設中的配色規則和技巧網站
- 深入理解 Android ANR 觸發原理以及資訊收集過程Android
- HTTP協議簡述HTTP協議
- Linux 核心、Shell 簡述Linux
- Kubernetes架構簡述架構
- 簡述Linux磁碟IOLinux
- Symfony 路由配置簡述路由