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