一、基本概念
什么是ANR?
简单来说就是:
当前事件没有机会得到处理
当前事件正在处理但是没有及时完成
源码分析
ActivityThread的main方法主要就是做消息循环,一旦退出消息循环,那么你的应用也就退出了。
|
|
进入Loop.loop()
方法
|
|
得出结论:因为Android 的是由事件驱动的,looper.loop() 不断地接收事件、处理事件,每一个点击触摸或者说Activity的生命周期都是运行在 Looper.loop() 的控制之下,如果它停止了,应用也就停止了。只能是某一个消息或者说对消息的处理阻塞了 Looper.loop(),而不是 Looper.loop() 阻塞它。
也就说我们的代码其实就是在这个循环里面去执行的,当然不会阻塞了。