Looper死循环为什么不会导致应用的卡死?
答:虽然主线程Looper.loop是死循环,但是主线程所有的东西都跑在Looper.loop里面了,所有的生命周期的东西,比如Activity,Service都会运行在里面,而且都是以消息的形式存在。。不会产生ANR。ANR产生的原因有多种:
1.5秒内没有响应输入的事件。
2.广播接受者内10秒内没有执行完毕。
每个APP都有一个自己的虚拟机。 当我们点击启动程序,launch就会启动一个application,application就会启动一个zygote,zygot就会给我们分配搞一个虚拟机。在分配完虚拟机之后,我们的应用程序就会运行在这个虚拟机上。紧接着,就会启动一个ActivityThread.
应用程序启动流程整体概念?
答:Launcher通过Binder的方式启动了System server进程(AMS),这个再通过socket方式,启动了zygote,zygote再通过fork的方式,启动了APP。zpp再通过binder的方式返回给system server.
主线程唤醒的方式有哪些?
1.输入事件
2.我们往Looper里面添加消息。
所以回到最初的第一个问题。当没有消息的时候,是block也就是主线程睡眠了。我们这个时候有唤醒事件就会把主线程唤醒了。
每一个事件都是Looper里的Message。