Skip to content

StubActivity · 占位 Activity 族 ​

StubActivity 是欺骗真实 AMS 清单检查的占位 Activity。它在宿主 Manifest 里预声明了 N 个内部子类(C0~CN),真实系统看到的是这些合法的宿主组件,运行时再用 H Callback 把 Intent 还原成虚拟 App 的真实 Activity。

为什么要 100 个存根 ​

真实 AMS 启动 Activity 前会检查「目标组件是否在调用方 Manifest」。虚拟 App 的 Activity 不在宿主 Manifest 里,直接 startActivity 会被拒。解法:

  1. 虚拟 AMS 把真实 Intent 换成指向 StubActivity.C{index} 的 Stub Intent。
  2. StubActivity.C{index} 在宿主 Manifest 里声明过,AMS 清单检查通过。
  3. 真实 AMS 启动 StubActivity.C{index}。
  4. 主线程 H Callback 拦到 LAUNCH_ACTIVITY,把 Stub Intent 还原成真实 Intent,反射创建真实 Activity。

存根数量(STUB_COUNT,默认 50)要够容纳并发任务栈,每个并发 Activity 占一个槽位,避免复用冲突。

Stub Activity 启动与还原 ​

变体 ​

StubActivity 是抽象基类,子类 C0~CN 只是占位(空实现)。还有几个语义变体:

类语义
StubDialogDialog 风格存根(透明/弹窗主题)
StubExcludeFromRecentActivity不进最近任务列表的存根
StubPendingActivityPendingIntent 用的存根

onCreate ​

StubActivity.onCreate 本身不创建 UI——真正的 Activity 创建发生在 H Callback 里。Stub 只是把启动信号传出去。

关联 ​

基于 VirtualApp 与 epic,仅供学习研究。VirtualApp 禁止商用。