Java 为什么Android中只有UI线程才能更新UI?

Java 为什么Android中只有UI线程才能更新UI?,java,android,ui-thread,Java,Android,Ui Thread,有人能给我解释一下为什么只有Android中的UI线程才能更新UI吗? 为什么其他线程不能更新UI?如关于线程的指南所述: 当您的应用程序响应用户交互执行密集工作时,除非您正确实现应用程序,否则此单线程模型可能会产生较差的性能。具体来说,如果所有事情都发生在UI线程中,那么执行长时间操作(如网络访问或数据库查询)将阻塞整个UI。线程被阻止时,无法调度任何事件,包括图形事件。从用户的角度来看,应用程序似乎挂起了。更糟糕的是,如果UI线程被阻塞超过几秒钟(目前大约5秒钟),用户将看到臭名昭著的“应用

有人能给我解释一下为什么只有Android中的UI线程才能更新UI吗? 为什么其他线程不能更新UI?

如关于线程的指南所述:

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

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

不要阻止UI线程不要从访问Android UI工具包 在UI线程之外


声明Android UI toolkit不是。因此,单线程模型确保了UI不会同时被不同的线程修改。

这是我见过的几乎所有UI框架的工作方式……请参见: