繁体   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