文章目录
- Android 16 ActiveServices 源码拆解:服务启动绑定链路、前台服务类型策略与 ANR 防御机制
- 导入语
- 1 ~> ServiceMap:按用户隔离的进程级服务索引
- 1.1 为什么不是全局一张表
- 1.2 ServiceMap 的三张核心索引
- 1.3 延迟启动队列 mStartingBackground
- 2 ~> 启动链路:从 startService 到 realStartServiceLocked
- 2.1 完整调用链
- 2.2 bringUpServiceLocked 的三板斧
- 2.3 realStartServiceLocked 的 Binder 跨越
- 3 ~> ANR 防御:bumpServiceExecutingLocked 计数器机制
- 3.1 为什么服务也会 ANR
- 3.2 双阈值设计
- 3.3 计数器机制:executingCount
- 3.4 超时后的处理
- 4 ~> 绑定链路:bindService 的连接建立
- 4.1 bindService 与 startService 的本质区别
- 4.2 绑定链路核心代码
- 4.3 AppBindRecord 与 IntentBindRecord
- 5 ~> 前台服务治理:ForegroundServiceTypePolicy 与限时机制
- 5.1 Android 14+ 的 FGS 类型权限
- 5.2 ShortFgsInfo:短时前台服务的豁免
- 5.3 TimeLimitedFgsInfo:按类型的硬时限
- 6 ~> 服务的生命周期状态机
- 7 ~> 实战:观察与调参
- 7.1 查看所有运行中的服务
- 7.2 查看前台服务类型策略
- 7.3 调整后台启动并发数
- 7.4 追踪服务 ANR
- 思考 && 总结
- 结尾
Android 16 ActiveServices 源码拆解:服务启动绑定链路、前台服务类型策略与 ANR 防御机制
📖文章简介:本文基于 Android 16 AOSP 源码,深度拆解ActiveServices的服务生命周期管理体系。文章从startService/bindService的 Framework 入口切入,追踪ServiceMap的进程级索引结构、bringUpServiceLocked→realStartServiceLocked的启动链路、bumpServiceExecutingLocked→serviceDoneExecutingLocked的 ANR 防御计数器,以及 Android 14+ 引入的ForegroundServiceTypePolicy类型权限检查与ShortFgsInfo/TimeLimitedFgsInfo限时机制。配以 Mermaid 状态图展示 ServiceRecord 的完整生命周期流转,附dumpsys activity services实战与后台启动限制调参,适合从事 Android 服务性能优化与后台行为治理的工程师阅读参考。