ANR
一:什么是ANR
ANR:Application Not Responding,即應(yīng)用無響應(yīng)
二:ANR的類型
ANR一般有三種類型:
1:KeyDispatchTimeout(5 seconds) --主要類型
按鍵或觸摸事件在特定時(shí)間內(nèi)無響應(yīng)
2:BroadcastTimeout(10 seconds)
BroadcastReceiver在特定時(shí)間內(nèi)無法處理完成
3:ServiceTimeout(20 seconds) --小概率類型
Service在特定的時(shí)間內(nèi)無法處理完成
三:KeyDispatchTimeout
A key or touch event was not dispatched within the specified time(按鍵或觸摸事件在特定時(shí)間內(nèi)無響應(yīng))
具體的超時(shí)時(shí)間的定義在framework下的
ActivityManagerService.java
//How long we wait until we timeout on key dispatching.
staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000
四:為什么會(huì)超時(shí)呢?
超時(shí)時(shí)間的計(jì)數(shù)一般是從按鍵分發(fā)給app開始。超時(shí)的原因一般有兩種:
(1)當(dāng)前的事件沒有機(jī)會(huì)得到處理(即UI線程正在處理前一個(gè)事件,沒有及時(shí)的完成或者looper被某種原因阻塞住了)
(2)當(dāng)前的事件正在處理,但沒有及時(shí)完成
五:如何避免KeyDispatchTimeout
1:UI線程盡量只做跟UI相關(guān)的工作
2:耗時(shí)的工作(比如數(shù)據(jù)庫操作,I/O,連接網(wǎng)絡(luò)或者別的有可能阻礙UI線程的操作)把它放入單獨(dú)的線程處理
3:盡量用Handler來處理UIthread和別的thread之間的交互
六:UI線程
說了那么多的UI線程,那么哪些屬于UI線程呢?
UI線程主要包括如下:
轉(zhuǎn)載于:https://www.cnblogs.com/liyuejiao/p/4257040.html
總結(jié)
- 上一篇: DWZ与KindEditor编辑器的整合
- 下一篇: ExcelReport第三篇:扩展元素格