2012-10-12 44 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