结论
- 初始化后,所有主线程做的事情都是在looper.loop()中完成的,因为主线程不做其他事,所以不会卡死
- 基于linux的epoll模型,当主线程没有message消费时,会进入睡眠状态(简单理解),等到有新的可消费的Message时,再转为活跃状态处理Message(类似一个事件回调)。主线程在睡眠状态会让出CPU,并不是一直不停在执行循环。
如有兴趣了解下epoll机制可以看看这篇文章:
产生此疑问的前提
怎么执行到looper.loop()
首先得分析下ActivityThread的main()方法,我们可以简单认为此方法为一个APP启动的入口。(代码只展示关键步骤)
public static void main(String[] args) {
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false, startSeq);
if (sMainThreadHandler == null) {
sMainThreadHandler