ANR是一個例外,錯誤還是什麼?我們能否真的在try{} catch(){}
結構中捕捉它?「ANR」是一個異常還是錯誤?
回答
ANR(應用程序不響應)不完全是錯誤。當您的應用程序非常緩慢並需要大量時間來響應時纔會顯示,從而使用戶等待。如果您的應用程序讓他們等待很長時間,用戶將不會感激。所以,Android框架爲用戶提供了關閉應用程序的選項。 http://developer.android.com/guide/practices/design/responsiveness.html
當您在主線程上執行長時間運行操作時,會發生這種情況。由於主線程被阻塞,系統無法在此期間處理用戶交互。解決方案是在工作線程中執行繁重的操作,並保持主線程空閒。
無響應(ANR)對話框
你可以想像的應用,如果主線程忙於繁重的計算或從網絡套接字讀取 數據,也不能立即對用戶輸入,響應作爲 點擊或滑動。
對用戶交互沒有快速響應的應用程序會感覺到 無響應 - 任何超過幾百毫秒的延遲都會顯着地變爲 。這是一個非常有害的問題,Android平臺可以保護 用戶免受主線程上執行太多的應用程序的影響。
注意:
如果應用程序沒有對用戶輸入FVE秒內響應, 用戶將看到應用程序無響應(ANR)對話框, 將提供退出應用程序的選項。
下面的屏幕截圖顯示了一個典型的Android ANR對話框:
Android的努力工作,以同步的用戶界面與 硬件刷新率重繪。這意味着它的目標是以每秒 秒的60幀的速率重新繪製 - 這僅僅是每幀16.67毫秒。如果我們在接近16毫秒的任何地方使用 的主線程工作,我們就會影響幀速率,導致動畫效果不穩定,滾動等現象。
理想情況下,我們當然不想丟棄一個幀。 Jank,反應遲鈍, ,特別是ANR,提供了非常差的用戶體驗,這意味着不好的評論和不受歡迎的應用程序將被翻譯成 。建立Android 應用程序時遵循的規則是:不要阻塞主線程!
注意:
Android提供在每個設備上開發人員選項 一個有用的嚴格模式設置,這將FL屏幕上的灰時 主線程上執行長時間運行的操作應用。
進一步保護被添加到平臺蜂窩(API等級11)與 引入新的異常類,NetworkOnMainThreadException,如果系統檢測到網絡活動的主線程上啓動 時引發RuntimeException的一個子類 的。
來源:
異步編程的Android - 第二版 - 埃爾德洛斯 - 2016年7月
- 1. ANR異常處理
- 2. EF4:NavigationProperty和join:是一個錯誤還是一個特徵?
- 3. ANR錯誤 - > ANR keyDispatchingTimedOut
- 4. 這是一個PHP'錯誤'還是我錯過了什麼?
- 5. 這是一個PHP preg_match錯誤還是我做錯了什麼?
- 6. 這是一個printf()/ pthread錯誤,還是我錯過了什麼?
- 7. 這是一個clojure.core.match錯誤還是隻是我?
- 8. ANR keyDispatchingTimedOut錯誤
- 9. .NET異常錯誤,這個錯誤是什麼意思?
- 10. 這是一個KnockoutJS錯誤還是我做多個綁定錯誤?
- 11. b.getCharSequence是給我一個空指針異常錯誤
- 12. 是一個異常的錯誤的子類?
- 13. Verilog錯誤:XXX不是一個常數
- 14. Verilog錯誤:值不是一個常量?
- 15. 錯誤是否可以忽略異常?
- 16. PHP異常而不是錯誤
- 17. 什麼是NoSuchElementException的異常錯誤
- 18. 真的是異常的例外錯誤?
- 19. dojox-demos目前是壞了還是我犯了一個錯誤?
- 20. 這是一個IE錯誤還是我愚蠢?
- 21. 時區應該是一個常數還是一個變量?
- 22. 在Try塊中,爲多個異常創建一個Catch還是爲每個異常創建一個Catch更好?
- 23. 這是一個錯誤還是我使用錯誤的Log()重載?
- 24. Javascript日期,這是我的錯誤還是我發現了一個錯誤?
- 25. 返回NaN還是拋出異常?
- 26. CLR有胖還是小異常幀?
- 27. AngularJS ngResource沒有回電異常錯誤:空操作,是不是一個函數
- 28. 這是一個mod_rewrite錯誤還是我錯過了一些東西?
- 29. 這是一個可能的Oracle錯誤還是我錯過了一些東西?
- 30. 節點式回調:完成(異常)還是拋出異常?
你忘了提及你所使用的平臺。 –
尋找「I/Choreographer(xxx):跳過了xxx幀!應用程序可能在其主線程上做了太多工作。」在你的logcat中。這可能會幫助你找到你的問題。 – Christ
看起來像是一個'什麼' – Kirby