问题
app 程序入口中为主线程准备好了消息队列
而根据 Looper.loop()
源码可知里面是一个死循环在遍历消息队列取消息
而且并也没看见哪里有相关代码为这个死循环准备了一个新线程去运转,但是主线程却并不会因为Looper.loop()
中的这个死循环卡死,为什么呢?
分析
对于线程既然是一段可执行的代码,当可执行代码执行完成后,线程生命周期便该终止了,线程退出。
而对于主线程,我们是绝不希望会被运行一段时间,自己就退出,那么如何保证能一直存活呢?简单做法就是可执行代码是能一直执行下去的,死循环便能保证不会被退出
但这里可能又引发了另一个问题,既然是死循环又如何去处理其他事务呢?通过创建新线程的方式。
真正会卡死主线程的操作是在回调方法 onCreate/onStart/onResume
等操作时间过长,会导致掉帧,甚至发生 ANR
,looper.loop
本身不会导致应用卡死。