歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android應用ANR事件分析指導

Android應用ANR事件分析指導

日期:2017/3/1 10:17:17   编辑:Linux編程

一. ANR是什麼?

ANR:Application Not Responding,即應用無響應。

二.ANR的類型

1:KeyDispatchTimeout(5 seconds) --主要類型

按鍵或觸摸事件在特定時間內無響應

2:BroadcastTimeout(10 seconds)

BroadcastReceiver在特定時間內無法處理完成

3:ServiceTimeout(20 seconds) --小概率類型

Service在特定的時間內無法處理完成

三.主要類型KeyDispatchTimeout

Akey or touch eventwas not dispatched within the specified time(按鍵或觸摸事件在特定時間內無響應)

具體的超時時間的定義在framework下的

ActivityManagerService.java

//How long we wait until we time out on key dispatching.

staticfinal intKEY_DISPATCHING_TIMEOUT = 5*1000

四.為什麼會超時

超時時間的計數一般是從按鍵分發給app開始。超時的原因一般有兩種

(1)當前的事件沒有機會得到處理(即UI線程正在處理前一個事件,沒有及時的完成或者looper被某種原因阻塞住了)

(2)當前的事件正在處理,但沒有及時完成

五.如何避免KeyDispatchTimeout

1:UI線程盡量只做跟UI相關的工作

2:耗時的工作(比如數據庫操作,I/O,連接網絡或者別的有可能阻礙UI線程的操作)把它放入單獨的線程處理

3:盡量用Handler來處理UIthread和別的thread之間的交互

六如何去分析ANR

Copyright © Linux教程網 All Rights Reserved