2012-10-12 43 views
3

引述的Android开发者指南这里here发现其说Android小工具,在抽出UI线程

此外,Andoid UI工具包不是线程安全的。所以,你必须 不能操纵从一个工人的UI线程,你必须尽一切 操纵用户界面从UI线程

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

回答

3

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

UI工具包被设计为仅在主线程(或称为“UI线程”)上运行。如果您现在从另一个线程访问UI组件,则可能会损坏UI工具包的对象。为了确保你不这样做,将UI工具包的设计师做两件事情:

  • 他们写的,你是不是应该从主线程
  • 一些外部访问UI工具包的文档中(但不是全部)的UI工具包检查的方法,看看您是否从主线程之外进行访问,并在这样的条件下

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

我希望这是有道理的。

+0

谢谢Daivd。真的很有道理。 – user1730789