10-服务广播提供者
Service 工作原理
众所周知, Service 有两套流程,一套是启动流程,另一套是绑定流程
假设要启动的 Service 是在一个新的进程中,启动过程可分为5个阶段
- AMS 检查启动 Service 的进程是否存在,如果不存在,先把 Service 信息存下来,然后新建一个新的进程
AMS 检查 Service 是否在 AndroidManifest 声明了,若没声明则会直接报错 AMS 检查启动 Service 的进程是否存在,如果不存在,先把 Seic 信息存下来,然后创建一个新的进程, 在 AMs 中,每个 rice ,都使用 SeviceRecord 对象来保存


你会发现,这段代码和前面介绍的 handleLaunchActivity 差不多,都是 PMS 中取出包的信息 packagelnfo ,这是一个 LoadedApk 对象,然后获取它的 classload 反射出来一个类的对象,在这里反射的是 Service.
四大组件的逻辑都是如此,所以我们要做插件化,可以在这里做文章,换成插件的 classLoader ,加载插件中的四大组件
广播原理
BroadcastManager 静态注册是通过 PMS (即: PackageManagerService 完成整个注册过程的,除此之外四大组件也是通过 PMS 完成注册)。
acitivityManagerService 通知 packmanagerService 去查询静态广播,查到后将广播放到 BroadcastQueue 里,然后用 handler 机制去动态注册广播
内容提供者原理
原理:packmanagerservice 里注册,在使用 ContentResolver 来进行查询操作时,query 方法层层调用到 ActivityThread 的 acquireExistingProvider 方法,根据 URI 字符串当中的授权 host(即 authority )和当前所在用户的 userId 来获取对应的 Provider 实例。
10-服务广播提供者
http://peiniwan.github.io/2025/12/d52411f76b00.html