Application Lifecycle and ViewManager / App 生命周期与页面栈

ViewManager 管理一个 App 的 Stack Arena 栈。栈顶打开了新 App 时,旧的会被暂停。

启动方式

1
2
LaunchResult result = views.launch(appItem, parameters);
LaunchResult direct = views.push<MyApp>(ui, parameters);

launch()AppItem 中的 factory,适合 AppLauncher 和注册系统。push<T>() 直接转发构造参数,适合已知具体类型的内部导航。

LaunchResult 内涵

结果 含义
Ok App 已构造并提交到栈
StackFull 已达 PIXELUI_MAX_VIEW_DEPTH
ArenaFull 页面数未满,但 App 对象字节和对齐填充已放不下
ConstructionFailed factory 不能构造对象
TransitionInProgress 正在页面提交或等待 fade 完成

不允许嵌套导航

onEnter()onExit()onPause()onResume()、App 构造/析构以及导航输入中,不能同步再次 push/pop。ViewManager 使用 transition guard 拒绝嵌套请求,系统不会在半完成的栈上继续操作。

fade 动画结束后才会执行新App的 onEnter()

从已显示 App push 新 App 时,新 App 先进入 m_pendingEnterrenderer() 继续推进 fade,最后一帧完成后才调用 onEnter()。这保证新 App 不会在上一页还可见时提前发布 Widget、Popup 或动画。

isTransitioning() 在等待 fade 时也返回 true,但 renderer 只会被短暂的 commit guard 挡住,否则 fade 自己会永远无法完成。

App生命结束 销毁前会清理所有上下文

ViewManager 在 pop 时清理 drawable、exit callback、动画、Coroutine、Focus 和 Popup 引用,然后调用具体 App 析构函数并回滚 arena marker。