您所在的位置:角膜穿孔 >> 推荐医院>> >> Android稳定性之ANR

Android稳定性之ANR

文章来源:角膜穿孔   发布时间:2018-2-22 21:00:43   点击数:
  一、简介什么是ANR

ANR,是“ApplicationNotResponding”的缩写,即“应用程序无响应”。

如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现ANR。

ANR产生的条件

1.主线程:只有应用程序进程的主线程响应超时才会产生ANR

.超时时间:ANR的类型不同,超时时间也不同,但只要在这个时间上限内没有响应就会ANR

.用户输入/特定操作:用户输入是指按键、触屏等设备输入事件;特定操作是指BroadcastReceiver和Service的生命周期中的各个函数。产生ANR的上下文不同,报出ANR的原因也会不同。

ANR问题的类型

1.Inputdispatching超时。

.BroadcastReceiver执行超时。

.Service各生命周期函数执行超时。

4.ContentProvider相关操作执行超时。

哪些属于主线程

1.Activity:onCreate(),onResume(),onDestroy(),onKeyDown(),onClick(),etc

.AsyncTask:onPreExecute(),onProgressUpdate(),onPostExecute(),onCancel,etc

.Mainthreadhandler:handleMessage(),post*(runnabler),etc

二、ANR类型Inputdispatching超时

1)用户输入事件处理超时

)窗口获取焦点超时

1.1用户输入事件处理超时

?原因:主线程对输入事件在5秒内没有处理完毕

?提示语:Reason:InUputdispatchingtimedout(Waitingbecausethefocusedwindowhasnotfinishedprocessingtheinputeventsthatwerepreviouslydeliveredtoit.)

?产生这种ANR的前提是要有输入事件,如果用户没有触发任何输入事件,即便是主线程阻塞了,也不会产生ANR,因为InputDispatcher没有分发事件给应用程序,当然也不会检测处理超时和报告ANR了。

1.窗口获取焦点超时

?原因:焦点应用在n秒内没有获得窗口焦点

?提示语:Reason:Inputdispatchingtimedout(Waitingbecausenowindowhasfocusbutthereisafocusedapplicationthatmayeventuallyaddawindowwhenitfinishesstartingup.)

超时时间定义在ActivityManagerService.java

0//Howlongwewaituntilwetimeoutonkeydispatching.

0staticfinalintKEY_DISPATCHING_TIMEOUT=5*;

04

05//Howlongwewaituntilwetimeoutonkeydispatchingduringinstrumentation.

06staticfinalintINSTRUMENTATION_KEY_DISPATCHING_TIMEOUT=60*;

BroadcastReceiver执行超时

?原因:主线程在执行BroadcastReceiver的onReceive函数时,60秒内没有执行完毕

?提示语:Reason:BroadcastofIntent{act=android.net.wifi.WIFI_STATE_CHANGEDflg=0xcmp=







































网络客服
北京中科医院曝光

转载请注明:http://www.iwkqm.com/tjyy/7823.html
  • 上一篇文章:
  • 下一篇文章: