广播接收器与自启动机制
广播接收器类型
静态注册
在 AndroidManifest.xml 中声明,App 即使不运行也能接收特定 Intent。系统启动后就会自动注册到包管理器中。
动态注册
在代码中通过 registerReceiver() 注册,随 App 进程生命周期存在。动态注册的接收器不会出现在 LibChecker 的组件清单中。
常见自启动触发方式
很多用户困惑"为什么这个 App 老是自己跑起来",答案往往藏在广播接收器里:
| 广播 Action | 含义 |
|---|---|
| BOOT_COMPLETED | 设备开机完成后 |
| LOCKED_BOOT_COMPLETED | 锁屏开机完成后 |
| MY_PACKAGE_REPLACED | 本应用被更新后 |
| PACKAGE_ADDED / PACKAGE_REMOVED | 其他应用安装/卸载时 |
| CONNECTIVITY_ACTION | 网络连接变化 |
| SCREEN_ON / SCREEN_OFF | 屏幕亮灭 |
| TIME_SET / TIMEZONE_CHANGED | 时间变化 |
LibChecker 中的广播分析
BroadcastReceiver Tab 展示:
- 接收器完整类名
- 声明的 IntentFilter(监听哪些广播)
- 是否 exported
- 所需权限
如何识别"自启动重灾区"
一个 App 如果注册了大量 BOOT_COMPLETED、CONNECTIVITY_ACTION、TIME_SET 等广播接收器,说明它在想尽办法被系统唤醒。把所有 App 的广播接收器清单对比一下,哪些是"常驻内存大户"一目了然。
注意:系统预装应用通常有大量合法的广播接收器,不要一概而论。