簡體   English   中英

在工作線程的UI線程上使用變量

[英]Using Variables on UI Thread from Worker Thread

Android開發者網站聲明在UI線程中工作時必須遵循兩條規則,即

  1. 不要阻止UI線程

  2. 不要從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM