外观
如何理解UI 线程与 View 状态更新?
标准回答
对于已经附着的View树,应在创建和管理它的UI线程进行状态和布局相关操作,通常就是应用主线程。setSelected可能改变drawable状态并触发刷新,修改布局参数也会影响后续布局,因此不要把这些操作分散到后台。
单独给一个尚未共享的LayoutParams对象赋值,与更新正在使用的View树不是同一件事。但工程上应明确边界:后台准备数据,UI线程应用状态;异步Inflate等受支持的例外要遵循专门契约。
“没有立刻抛异常”不代表线程安全,数据竞态可能只在特定机型、生命周期或负载下出现。
追问与回答
为什么某些后台setText好像能成功
线程检查时机与触发路径有差异,偶然运行成功不是API契约保证。仍应遵循UI线程所有权。
内容来源
- Android 与 AI 工程 Wiki · 原条目
q078