blocker 中文文档 下载 App

打开 A 应用 为什么 B 和 C 也被拉起来了 关联唤醒链拆解

关联唤醒是安卓后台混乱的核心原因之一

你打开了一个社交应用,过一会儿发现它拉起来了推送服务、输入法服务、支付 SDK……一长串后台进程。这就是关联唤醒链——应用之间通过系统 intent 和自定义 intent 互相"勾连",形成一张庞大的唤醒网络。

唤醒链的典型模式

打开应用 A
  → 应用 A 发送/触发某个 intent(自定义 intent 或系统广播)
  → 应用 B 的 receiver 监听了这个 intent
  → B 的 receiver 被触发 → 启动 B 的 service
  → B 的 service 又发送了另一个 intent
  → 应用 C 的 receiver 监听了 → C 也被启动

常见的唤醒触发场景

触发源后续被唤醒的应用
登录某个社交 App输入法、支付 SDK、定位 SDK 等监听 PACKAGE_REPLACED 或 USER_PRESENT 的应用
安装/更新某个应用监听 PACKAGE_ADDED 或 PACKAGE_REMOVED 的应用
连 Wi-Fi / 开关移动数据监听 CONNECTIVITY_CHANGE 的应用(会自动跑数据同步)
屏幕解锁监听 USER_PRESENT 或 SCREEN_ON 的应用(广告 SDK 常用,解锁后推广告)
开机所有监听 BOOT_COMPLETED 的应用

怎么用 Bloker 断唤醒链

Bloker 断唤醒链的核心手段:关掉应用 B 和 C 的 receiver(那个监听 A 发出来的 intent 的 receiver)。

实操示例:某个应用"打开 A 就牵出 B"

  1. 先观察:打开应用 A → 立刻按最近任务 → 截图/记住被拉起的 B 和 C
  2. 回 Bloker → 进 B 的详情页 → receiver tab → 看 B 监听了哪些 intent
  3. 找监听"应用 A 相关事件"的 receiver(比如包名、action、自定义 intent 字符串里含 A 的名字)
  4. 关掉那个 receiver
  5. 同样处理 C
  6. 杀掉 B 和 C → 重新打开 A → 验证 B 和 C 还会不会被拉起

怎么判断哪个 receiver 在监听什么

Bloker 会根据 receiver 的 intent-filter 自动给 receiver 打标签(比如标上 BOOT_COMPLETED、SCREEN_ON)。如果没打标签,可以:

为什么 IFW 对断唤醒链更有效

关联唤醒里有些 receiver 用 PM 方式关掉后会被应用自动恢复——尤其是大厂应用的 SDK 内部有自恢复逻辑。用 IFW 方式关掉 receiver:

断唤醒链推荐全程用 IFW 方式。