外观
如何理解跨屏流转的状态机与取消语义?
标准回答
一个可复用状态机可以包含空闲、准备目标、等待有效帧、过渡、完成和回退。每次操作分配 generation 或 sessionId,异步回调必须校验仍属于当前操作。目标可见、输入归属切换、源资源释放通常不是同一个事件。
先定义不变量:任何时刻只有一个最终状态负责释放资源;旧回调不能覆盖新会话;成功不能早于目标有效画面的就绪条件;取消后不再开放旧输入路径。超时应触发有界回退,而不是无限等待目标回调。
同一业务命令重复到达时,优先返回当前状态或复用已有操作。取消与成功并发发生时,由串行事件循环或受保护的状态转换决定唯一结果,资源清理保持幂等。这是建议的实现结构,不能据此断言既有平台采用了相同状态命名。
追问与回答
旧动画结束回调为何会导致新界面消失
回调没有校验操作代次,释放了当前会话仍使用的图层。将资源归属绑定到代次,清理前验证所有权。
为什么 onResume 不适合当唯一交接信号
它描述生命周期,不能证明目标 Surface 已产生并呈现有效内容,应结合绘制或显示链路证据定义交接。
易混淆点
- 把延迟固定 300ms 当作所有设备的就绪判断。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q114