OverlayManagerService(OMS)是Android系统中用于管理运行时资源覆盖(RRO)的核心服务,支持动态启用或禁用Overlay包。以下是其核心功能与实现机制:
核心功能
- 动态资源替换:允许在运行时替换应用资源(如图片、布局文件等),普通应用与Overlay包可共享资源,但普通应用优先使用自身资源;启用Overlay包时,系统会切换到Overlay包中的资源。 12
- 系统架构 :运行在
:ml-search-more[system_server]{text="system_server"}
进程,通过:ml-search-more[AIDL]{text="AIDL"}
接口提供服务,具体逻辑由:ml-search-more[OverlayManagerServiceImpl]{text="OverlayManagerServiceImpl"}
实现。 24
实现机制
- 初始化与启动 :开机时由
:ml-search-more[SystemServer]{text="SystemServer"}
启动,负责管理所有用户的Overlay包状态。 4 - 资源更新流程
- 当启用或禁用Overlay包时,
OverlayManagerService
会通过:ml-search-more[ActivityManager]{text="ActivityManager"}
通知目标应用重新加载资源。 5 - 生成
:ml-search-more[idmap]{text="idmap"}
文件映射Overlay包资源路径,更新系统设置并触发广播(:ml-search-more[ACTION_OVERLAY_CHANGED]{text="ACTION_OVERLAY_CHANGED"}
),使应用感知变化。 6
- 当启用或禁用Overlay包时,
- 数据维护 :通过
:ml-search-more[OverlayManagerSettings]{text="OverlayManagerSettings"}
记录所有用户的Overlay包信息,支持查询和动态修改。 25
适用场景
主要用于系统主题切换、界面定制等场景,允许用户或开发者通过安装不同Overlay包实现个性化界面调整,而无需修改系统底层代码。 23