1. Activity的启动过程
performLaunchActivity
方法解析:
- 从
ActivityClientRecord
中获取带启动的Activity
的组件信息 - 通过
Instrumentation
的newActivity
方法使用类加载器创建Activity
对象 - 通过
LoadApk
的makeApplication
方法来尝试创建Application
对象 - 创建
ContextImpl
对象并通过Activity
的attach
方法来完成一些重要数据的初始化 - 调用
Activity
的onCreate
方法
2. Service的启动过程
2.1 Service启动过程
handleCreateService
- 通过类加载创建
Service
实例 - 创建
Application
对象并调用onCreate
方法 - 创建
ContextImpl
对象,并通过Service
的attach
方法建立二者的联系 - 调用
Service
的onCreate
方法,并将Service
对象储存在ApplicationThread
的一个列表
2.2 Service绑定过程
-
ServiceConnection
和InnerServiceConnection
由serviceDispatcher
连接,ServiceConnection
和serviceDispatcher
由一个ArrayMap
连接,ServiceConnection
内部又保存了ServiceConnection
和InnerServiceConnection
-
ServiceConnection
的回调由AMS#publishService
完成,它的流程如下
3. BroadcastReceiver
3.1 广播的注册过程
3.1.1 静态注册
由PMS来完成整个注册过程
3.1.2 动态注册
-
AMS
最终会存储InnerReceiver
对象和IntentFilter
3.2 广播的发送和接收过程
4. ContentProvider
- 懒加载的机制,第一次使用的时候会创建
ContentProvider
并把它放入内存中,下次直接返回
handleBindApplication
- 创建
ContextImpl
和Instrumentation
- 创建
Application
对象 - 创建当前进程的
ContentProvider
并调用其onCreate
方法 - 调用
Application
的onCreate
方法