关键词不能为空

当前您在: 主页 > 英语 >

ANR异常详细

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-06 02:01
tags:

-

2021年2月6日发(作者:bullying)


一:什么是


ANR



ANR:Application Not Responding


,即应用无响应



二:


ANR


的类型



ANR


一般有三种类型:


< p>
1



KeyDispatchTimeout(5 seconds) --


主要类型



按键或触摸事件在特定时间内无响应



2



BroadcastTimeout(10 seconds)



BroadcastReceiver


在特定时间内无法处理完成



3

< p>


ServiceTimeout(20 seconds) --


小概率类型



Service


在特定的时间内无法处理完成



三:


KeyDispatchTimeout



Akey or touch event was not dispatched within the specified time


(按键或触摸事件在特定


时间内无响应)



具体的超时时间的定义在< /p>


framework


下的





//How long we wait until we timeout on key dispatching.



staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000



四:为什么会超时呢?



超时时间的计 数一般是从按键分发给


app


开始。超时的原因一般有两种




(1)


当前的 事件没有机会得到处理(即


UI


线程正在处理前一个事件,没有 及时的完成或者


looper


被某种原因阻塞住了)

< p>


(2)


当前的事件正在处理,但没有及时完成< /p>



五:如何避免


KeyDispatch Timeout



1



UI


线程尽量只做跟


UI


相关 的工作



2


:耗时的工作(比如数据库 操作,


I/O


,连接网络或者别的有可能阻碍

< br>UI


线程的操作)把


它放入单独的线程处理



3


:尽量用


Handle r


来处理


UIthread


和别的


thread


之间的交互




六:


UI


线程



说了那么多的


UI


线程,那么哪些属于


UI


线程呢?



UI


线程主要包括如下:



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



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



Mainthread handler: handleMessage(), post*(runnable r), etc



other




:


如何去分析


ANR



先看个


LOG:



04-01 13:12:11.572


I/InputDispatcher( 220): Application is not


responding


:


Window{/cree n


Activitypaused=false}.



5009.8ms since event, 5009.5ms since waitstarted



04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending


/creenActivity



04-01


13:12:14.123 I/Process(



220): Sending signal. PID: 21404 SIG: 3---


发生

ANR


的时


间和生成



的时间



04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3



……



04-0113:12:15.872 E/ActivityManager(



220): ANR in


(/.creenActivity)



04-0113:12:15.872 E/ActivityManager(



220): Reason:keyDispatchingTimedOut



04-0113:12:15.872 E/ActivityManager(



220): Load: 8.68 / 8.37 / 8.53



04-0113:12:15.872 E/ActivityManager(



220):


CPUusage from 4361ms to 699ms


ago


----


CPU< /p>



ANR


发生前的使用情况




04-0113:12:15.872 E/ActivityManager(



220):




5.5%21404/: 1.3%


user + 4.1% kernel / faults: 10 minor



04-0113:12:15.872 E/ActivityManager(


1.5% kernel / faults: 11 minor 2 major



04-0113:12:15.872 E/ActivityManager(


kernel



04-0113:12:15.872 E/ActivityManager(


kernel



04-0113:12:15.872 E/ActivityManager(


user + 0% kernel



04-0113:12:15.872 E/ActivityManager(


87% iowait



04-0113:12:15.872 E/ActivityManager(


ANR



CPU


的 使用量



04-0113:12:15.872 E/ActivityManager(


220):




4.3%220/system_server: 2.7% user +


220):




0.9%52/spi_qsd.0: 0% user + 0.9%


220):




0.5%65/irq/170-cyttsp-: 0% user + 0.5%


220):




0.5%296/ui: 0.5%


220):


100%TOTAL: 4.8% user + 7.6% kernel +


220):


CPUusage from 3697ms to 4223ms later


:--


220):




25%21404/: 25%









user + 0% kernel / faults: 191 minor



04-0113:12:15.872 E/ActivityManager(



220):





16% 21603/__eas(: 16%


user + 0% kernel



04-0113:12:15.872 E/ActivityManager(



220):





7.2% 21406/GC: 7.2% user + 0%


kernel



04-0113:12:15.872 E/ActivityManager(



220):





1.8% 21409/Compiler: 1.8% user + 0%


kernel



04-0113:12:15.872 E/ActivityManager(



220):




5.5%220/system_server: 0% user +


5.5% kernel / faults: 1 minor



04-0113:12:15.872 E/ActivityManager(



220):





5.5% 263/InputDispatcher: 0% user +


5.5% kernel



04-0113:12:15.872 E/ActivityManager(



220):


32%TOTAL: 28% user + 3.7% kernel





LOG


可以看出


AN R


的类型,


CPU


的使用情况,如果< /p>


CPU


使用量接近


100%


,说明当前


设备很忙,有可能是


CPU


饥饿导致了


ANR



如果< /p>


CPU


使用量很少,


说明主线程被


BLOCK




如果


IOwait


很高,说明


ANR


有可能是主线程在进行


I/O


操作造成的



除了看


LOG


, 解决


ANR


还得需要


< br>文件,



如何获取呢?可以用如下命令获取



$$chmod 777 /data/anr



$$rm /data/anr/



$$ps



$$kill -3


PID



adbpull data/anr/ ./





文件,看到最多的是如下的信息:



-----pid 21404 at 2011-04-01


13:12:14


-----




Cmdline:




DALVIK THREADS:



(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)




NATIVE





| group=





| sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976




PollOnce(Native Method)




(:119)




(:110


)




at (:3688)




at Native(Native Method)





(:507)





Init$$(:866)




at (:624)




at (Native Method)



说明主线程在等待下条消息进入消息队列


八:


Thread


状态



ThreadState (defined at



dalvik/vm/thread.h



)



THREAD_


UNDEFINED


= -1, /* makes enum compatible with int32_t */



THREAD_


ZOMBIE


= 0, /* TERMINATED */



THREAD


_


RUNNING


= 1, /* RUNNABLE or running now */



T HREAD


_


TIMED_WAIT


= 2, /* TIMED_WAITING in () */


< br>THREAD


_


MONITOR


= 3, /* BLOCKED on a monitor */



THREAD


_


WAIT


= 4, /* WAITING in () */



THREAD_INITIALIZING= 5, /* allocated, not yet running */



THREAD_STARTING = 6, /* started, not yet on thread list */



THREAD


_


NATIVE


= 7, /* off in a JNI native method */


THREAD


_


VMWAIT


= 8, /* waiting on a VM resource */


-


-


-


-


-


-


-


-



本文更新与2021-02-06 02:01,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/604712.html

ANR异常详细的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文