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

时间:2011-10-12 16:11:32

标签: java android ui-thread

有人可以向我解释为什么只有Android中的UI线程可以更新UI吗? 为什么任何其他线程都无法更新UI?

2 个答案:

答案 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线程之外