Android小部件,绘制UI线程

时间:2012-10-12 06:53:59

标签: android

引用此处的{+ 3}}引用的Android开发人员指南

  

此外,Andoid UI工具包不是线程安全的。所以,你必须   不要从工作线程操纵你的UI - 你必须做所有   从UI线程到用户界面的操作

小部件不是线程安全的意思是什么?当我们从UI线程更改Button的名称时,导致应用程序崩溃的原因。我知道UI线程有一个事件队列,但是一个单独的线程如何导致该队列出现问题?我试着环顾四周,到处都说你做不到,但没有理由?

1 个答案:

答案 0 :(得分:3)

当文档说UI工具包不是线程安全时,这意味着UI工具包的编写方式使得它假定所有对UI对象的访问都是从单个线。通过做出这种假设,UI工具包的实现者可以对所有UI对象进行不同步的访问,而不必担心数据损坏。这使得UI工具包更易于实现,更易于测试,并且提高了UI工具包的性能(因为它不需要在操作它们之前锁定对象)。

UI工具包旨在仅在主线程(也称为“UI线程”)上运行。如果您现在从另一个线程访问UI组件,则存在损坏UI工具箱对象的风险。为了确保您不这样做,UI工具包设计人员做了两件事:

  • 他们在文档中写道,您不应该从主线程外部访问UI工具包
  • UI工具包的一些(但不是全部)方法检查您是否从主线程外部进行访问并在这种情况下抛出异常

但是,这并不会强制阻止您从其他线程访问UI工具包。实际上,您可以从另一个线程更改按钮上的文本,而不会产生任何不良副作用。那就是说,你仍然不应该这样做。因为在某些情况下您会导致崩溃,在某些情况下您会发现您对UI所做的更改会被覆盖或忽略等等。

我希望这是有道理的。