Activity
是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个 Activity
的呢?Activity
对象是如何创建的,又是如何回调生命周期方法的?通过对底层工作原理的学习,是通往高级工程师的必经之路,我们必须对Activity
的启动原理知己知彼,才能在平时的开发中应对各种疑难杂症。本文主要是对Activity
启动流程的主要流程讲解,目的是给我们一个感性的认识,不用深扣代码细节,即可对上层开发有指导意义。除非是ROM
开发,那底层细节还是需要注意。
上图就可以很好的说明 App 启动的过程:
ActivityManagerService
组织回退栈时以ActivityRecord
为基本单位,所有的ActivityRecord
放在同一个ArrayList
里,可以将mHistory
看作一个栈对象,索引0所指的对象位于栈底,索引mHistory.size()-1
所指的对象位于栈顶Zygote
进程孵化出新的应用进程后,会执行ActivityThread
类的main
方法.在该方法里会先准备好Looper
和消息队列,然后调用attach
方法将应用进程绑定到ActivityManagerService
,然后进入loop循环,不断地读取消息队列里的消息,并分发消息。ActivityThread
的main
方法执行后,应用进程接下来通知ActivityManagerService
应用进程已启动,ActivityManagerService
保存应用进程的一个代理对象,这样ActivityManagerService
可以通过这个代理对象控制应用进程,然后ActivityManagerService
通知应用进程创建入口Activity
的实例,并执行它的生命周期方法