Skip to main content

最近应用

Recent Apps 是应用切换器和挂起应用注册表。它使用 LRU 链表保存可恢复的脚本应用,每个条目关联包 ID、App Activity、保存的子栈、页面快照和估算内存。

入口与行为​

数字表冠短按保持系统点击语义,长按打开 Recent Apps 页面。选择卡片后恢复原来的 Activity 子栈和脚本上下文。应用切换不等于应用退出。

挂起流程​

  1. 确认当前 Activity 属于可挂起的脚本应用。
  2. 分离 App Activity 子栈,把 View 放入不可见的 Parking Lot。
  3. 生成恢复动画快照和页面展示缩略图。
  4. 通过 SPM 将程序置为 SUSPENDED,暂停 SNI 定时器、动画和脚本回调。
  5. 将条目放到 MRU 端,再次使用时更新其位置。

恢复时重新附加子栈,按策略恢复资源,最后允许程序继续接收回调。

恢复策略​

定时器可以在恢复时最多补发一次、补发遗漏回调(最多十次),或跳过遗漏回调并重新计时。动画可以从暂停位置继续,也可以跳到结束状态并触发完成回调。依赖实时周期的逻辑应使用系统时间,不要假定挂起期间定时器仍在运行。

驱逐与失败边界​

Recent Apps 受条目数量和估算内存高水位限制,超过任一限制时从 LRU 尾部驱逐。驱逐会走完整停止和 teardown,不能只丢弃卡片。引擎复位、应用卸载时也会清理相关条目。

找不到包 ID 或条目已驱逐时,恢复失败且不创建半恢复程序;旧条目在引擎复位后不可恢复。挂起应用仍占用 Realm、View、快照、模块缓存和脚本对象的内存。