Activity:展示型组件(ApplicationThread - ActivityThread - Activity )
启动过程:ContextImpl - AMS - ActivityStack - app.Thread(ApplicationThread) - Handler H 发送消息 - ActivityThread - handleActivity
ApplicationThread: 是ActivityThread 的内部类,实现了Binder 接口,用于ActivityThread 和
AMS( ActivityManagerService )通信。
handleLaunchActivity:
1.从ActivityClientRecord中获取带启动的Activity的组件信息
2.通过instrumentation 的 newActivity 方法, 使用类加载 创建Activity 对象
3.通过LoadedApk 的 makeApplication 方法来尝试创建Applicaiton 对象
4.创建ContextImpl对象 , 并通过Activity 的 attach 方法来完成一些重要数据的初始化
5.调用Activity 的 onCreate 方法
Service:计算型组件
启动过程:ContextImpl - AMS - realStartServiceLocked - app.Thread(ApplicationThread) - Handler H 发送消息 - ActivityThread - handleService
handleCreateService:
1.通过类加载器创建Service 实例
2.创建Applicaiton 对象,并调用其onCreta()
3.创建ContextImpl ,并通过Service的attach方法建立两者的联系
4.最后调用Service 的 onCreate() 方法 , 并将Service 对象存储到AcitityThread中的
一个列表中。
bindService: Handler.post
BroadcastReceiver:消息型组件
静态注册:PMS (PackageManagerService)
动态注册:AMS - registerReceiver - 把远程对象InnerReceiver 和 IntentFilter 对象存储起来
发送:intent-filter - BroadcastQueue - BROADCAST_INTENT_MSG
接收:ApplicationThread - InnerReceiver - Handler H - ActivityThread
ContentProvider:数据共享型组件(ContentProvider 的 onCreate 先于 Application 的 onCreate 执行)
应用启动过程:ActivityThread - main() - attach - AMS - ApplicationThread
ContentProvider 启动:AMS - 启动ContentProvider进程 - 启动ContentProvider
- ActivityThread - main() - attach - ApplicaitonThread - AMS
- Handler - ActivityThread
handleBindApplicaiton:
1.创建ContextImpl 和 Instrumentation
2.创建Applicaiton 对象
3.启动当前进程的ContentProvider ,并调用其onCreate 方法
4.调用Applicaiton 的 onCreate 方法