[英]Using Variables on UI Thread from Worker Thread
Android開發者網站聲明在UI線程中工作時必須遵循兩條規則,即
不要阻止UI線程
不要從UI線程外部訪問Android UI工具包*
這是否意味着我可以從工作線程中訪問UI線程中的變量 ,即不是UI工具包?
如果是這樣,如果變量不斷更新(例如,從SensorEventListener
,則需要給出任何特殊注意SensorEventListener
。 謝謝。
這是否意味着我可以從工作線程中訪問UI線程中的變量,即不是UI工具包?
是的,只要它們被聲明為成員變量,那么您就可以訪問它們。 您甚至可以訪問UI
元素中的值,例如在TextView
上使用getText()
,您無法更新任何UI
元素。
如果變量不斷更新,需要給出任何特殊的考慮因素,
如果它們正在更新,那么您可能希望有一種同步變量的方法。 執行此操作的一種好方法是使用AsyncTask
並更新onPostExecute()
的變量。
如果您不熟悉使用AsyncTask
,請確保多次瀏覽文檔並理解它們。
不,您無法在UI線程外訪問它們。 很少有UI元素可以從非UI線程訪問,其中一個是ProgressBar。
您可以在單獨的線程中訪問UI元素,但無法更新它們
在非UI線程中更新UI元素的唯一方法是使用runOnUiThread
或使用Handler
對單獨線程中的UI線程進行回調,除此之外不能在單獨的線程中更改UI元素
UiThread外部不能訪問變量。 如果您想在UiThread之外進行修改,請使用:
Activity.runOnUiThread(Runnable)
一些“post”方法,用於存儲等待UiThread處理它們的修改。 例如,您可以使用BlockingQueue
。 看看java.util.concurrent
包
在一些非常罕見的情況下,在UiThread之外修改變量不會產生錯誤,在這種情況下,從UiThread訪問它是安全的。 在其他情況下,變量應該是私有的,並且嘗試在UiThread之外訪問它們應該引發IllegalStateException
或類似的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.