外观
AsyncLayoutInflater 与同步 Inflate 有什么差别?
标准回答
Inflate 指解析布局并创建 View 对象。同步 Inflate 在调用线程完成后才返回;AsyncLayoutInflater 尝试把支持的创建工作放到后台,完成后回调通知你。这样能让主线程更早处理别的任务,但布局本身仍然需要时间。
- 同步 Inflate 在调用线程构建 View 树,占用这段线程时间。
- AsyncLayoutInflater 在后台尝试构建,不兼容时会回退到 UI 线程。
- 未指定回调 Executor 时回调在 UI 线程;新重载可指定 Executor,挂载 View 前需确保回到 UI 线程。
通俗例子
假设复杂布局创建要 80ms。同步方式在主线程上完成时,这 80ms 内主线程难以处理其他排队工作;异步方式可先显示轻量外壳,后台准备好后再加入内容。若主线程后来正忙,加入内容和首帧显示仍可能被推迟。
深入解释
**Inflate 到底做了什么:**Inflate 解析布局并创建 View 对象。同步方式让当前线程等这件事做完;AsyncLayoutInflater 尝试在后台完成支持的创建工作,之后再把结果交给回调。
**哪些工作仍在主线程:**把 View 加到窗口、更新界面及后续布局绘制仍需正确的 UI 线程处理。默认完成回调回到主线程;使用自定义回调执行器时更要核对线程。不支持的创建过程还可能回退同步。
易混淆点
它不自动把 measure/layout/draw 全部搬到后台,也不保证所有布局都可异步。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
3.6.1