有人可以向我解释为什么只有Android中的UI线程可以更新UI吗? 为什么任何其他线程都无法更新UI?
答案 0 :(得分:9)
Documentation表示Android UI工具包不是thread-safe。因此,单线程模型确保UI不会被不同的线程同时修改。
答案 1 :(得分:3)
正如关于线程的android developper指南所述:
当您的应用执行密集型工作以响应用户交互时,除非您正确实施应用程序,否则此单线程模型可能会产生较差的性能。具体来说,如果UI线程中发生了所有事情,则执行网络访问或数据库查询等长时间操作将阻止整个UI。线程被阻止时,不会调度任何事件,包括绘制事件。从用户的角度来看,应用程序似乎挂起。更糟糕的是,如果UI线程被阻止超过几秒钟(当前大约5秒),则向用户呈现臭名昭着的“应用程序无响应”(ANR)对话框。然后,用户可能会决定退出您的应用程序,如果他们不满意,请将其卸载。
此外,Andoid UI工具包不是线程安全的。所以,你必须 不要从工作线程操纵你的UI - 你必须做所有 从UI线程操作到您的用户界面。因此,那里 只是Android单线程模型的两个规则:
不要阻止UI线程不要访问Android UI工具包 在UI线程之外