Skip to content
阅读进度

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 全部搬到后台,也不保证所有布局都可异步。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。