外观
主线程卡住时,为什么有些系统转场动画还能继续?
标准回答
部分系统转场由应用主线程之外的组件驱动,所以应用卡住时,窗口表面仍可能在移动。
- 应用主线程阻塞会影响新内容、输入处理及依赖主线程的动画。
- 系统可继续对已有 buffer 做 Surface 层面的位移、缩放或透明度变化。
- 是否继续取决于动画实际由应用、RenderThread 还是系统合成侧驱动。
通俗例子
打开新页时外框动画继续,但页内按钮不响应:系统可能在移动已有 Surface,而应用主线程还在初始化。
深入解释
**谁在驱动动画:**普通 View 动画依赖应用更新界面;某些窗口转场由系统控制 Surface 的位置、缩放或透明度,可以在应用没有提交新内容时继续变换已有画面。
**继续动说明不了什么:**外面的窗口转场还在动,不代表应用主线程正常,也不代表里面的按钮和内容还能响应。应分别看应用线程、渲染线程及系统合成链路。
易混淆点
不能把所有 ObjectAnimator 都说成 SurfaceFlinger 动画;看动画创建和更新属性的实际位置。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
3.6.6