Android中为什么主线程不会因为Looper.loop()里的死循环卡死?

首先,先来了解下,android 应用的程序入口。我们都知道,应用的入口是 ActivityThread 文件中的 main 方法,截图如下:

ActivityThread.java

我们可以看到,最后调用 Looper.loop(),也就是说,其实我们的应用其实就是运行在死循环中的。如果不运行死循环中,那么程序运行完,就结束了。

接下来,说下为什么阻塞跟程序卡死(ARN)

阻塞,应用死循环,没有输入事件,MsgQ为空,Looper空闲状态,线程进入阻塞,释放CPU执行权,等待唤醒。
卡死(ARN),是指消息里有超时操作,导致应用处理不过来,后续发送的消息。所以,阻塞跟应用卡死(ARN)没有必然的联系。

你可能感兴趣的:(Android中为什么主线程不会因为Looper.loop()里的死循环卡死?)