5

有人可以向我解释为什么只有 Android 中的 UI 线程可以更新 UI 吗?为什么其他线程不能更新 UI?

4

2 回答 2

9

文档指出 Android UI 工具包不是线程安全的。因此,单线程模型确保 UI 不会被不同的线程同时修改。

于 2011-10-12T16:23:01.150 回答
3

如关于 Thread的android 开发人员指南所述:

当您的应用程序执行密集工作以响应用户交互时,除非您正确实施应用程序,否则这种单线程模型可能会产生较差的性能。具体来说,如果一切都发生在 UI 线程中,执行诸如网络访问或数据库查询等长时间操作将阻塞整个 UI。当线程被阻塞时,不能调度任何事件,包括绘图事件。从用户的角度来看,应用程序似乎挂起。更糟糕的是,如果 UI 线程被阻塞超过几秒(目前大约 5 秒),用户会看到臭名昭著的“应用程序无响应”(ANR)对话框。如果他们不满意,用户可能会决定退出您的应用程序并卸载它。

此外,Andoid UI 工具包不是线程安全的。因此,您不能从工作线程操作您的 UI — 您必须从 UI 线程对您的用户界面进行所有操作。因此,Android 的单线程模型只有两条规则:

不要阻塞 UI 线程 不要从 UI 线程外部访问 Android UI 工具包

于 2011-10-12T16:21:12.160 回答