Skip to content
阅读进度

如何理解UI 线程与 View 状态更新? ​

返回 View 与显示链路 目录

标准回答 ​

对于已经附着的View树,应在创建和管理它的UI线程进行状态和布局相关操作,通常就是应用主线程。setSelected可能改变drawable状态并触发刷新,修改布局参数也会影响后续布局,因此不要把这些操作分散到后台。

单独给一个尚未共享的LayoutParams对象赋值,与更新正在使用的View树不是同一件事。但工程上应明确边界:后台准备数据,UI线程应用状态;异步Inflate等受支持的例外要遵循专门契约。

“没有立刻抛异常”不代表线程安全,数据竞态可能只在特定机型、生命周期或负载下出现。

追问与回答 ​

为什么某些后台setText好像能成功 ​

线程检查时机与触发路径有差异,偶然运行成功不是API契约保证。仍应遵循UI线程所有权。

内容来源 ​

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