Android四大组件的工作过程
概述
这里只分析一般过程,不涉及具体的源码分析。
Activity的启动过程
- 很明显,Activity的启动过程涉及到了IPC,其实四大组件的启动过程都和IPC有关。
- ActivityManagerService、ApplicationThread都是Binder,ApplicationTread完成了大量的Activity和Service的启动/停止相关的功能。
- Handler H对消息的处理会调用
handleLaunchActivity()
->performLaunchActivity()
得以最终完成Activity的创建和启动。
Service
Service的启动过程
Service绑定过程
- ContextImpl是Context的具体实现,通过Activity.attach()和Activity建立关联,是典型的桥接模式。
- ServiceRecord贯穿整个Service的启动过程。
- 与Activity的启动过程类似,与AMS发生了IPC,最后回到ApplicationThread中,通过发送消息给H来完成最终的启动。
ContentProvider
ContentProvider的启动过程
ContentProvider的query过程
- 当ContentProvider所在的进程启动时,ContentProvider会同时启动并发布到AMS中。这时ContentProvider的
onCreate
要先于Application的onCreate
而执行。 - 一般ContentProvider都是单实例的,这时由
android:multipleprocess
属性决定的,默认为false
。 - 访问ContentProvider需要ContentResolver,其真正实现类是ApplicationContentResolver。当ContentProvider所在进程未启动时,第一次访问它会触发ContentProvider的创建以及进程启动。
BroadcastReceiver
广播注册过程
广播接收/发送过程
- 静态注册和其他三大组件的注册在应用安装时由系统自动完成,具体来说是由PMS(PackageManagerService)来完成的。
- 动态注册广播最终会跨进程交给AMS,并把远程Receiver( 实际上传的是IIntentReceiver,是个Binder )对象和远程IntentFilter保存起来,完成注册任务。