3

Android 开发者网站指出,在 UI 线程中工作时必须遵循两条规则,即

  1. 不要阻塞 UI 线程

  2. 不要从 UI 线程外部访问 Android UI 工具包*

这是否意味着我可以访问从工作线程(即不是 UI 工具包)中访问 UI 线程中的变量?

如果是这样,如果变量不断更新(例如,从SensorEventListener. 谢谢。

4

4 回答 4

2

这是否意味着我可以从工作线程(即不是 UI 工具包)中访问 UI 线程中的变量?

是的,只要将它们声明为成员变量,您就可以访问它们。您甚至可以访问元素中的值,UI例如getText()TextView无法更新任何UI元素的情况下使用。

如果变量不断更新,是否需要特别考虑,

如果它们正在更新,那么您可能希望有一种同步变量的方法。这样做的一个好方法是使用AsyncTask并更新onPostExecute().

如果您不熟悉使用AsyncTask,请确保您多次阅读文档并理解它们。

于 2013-09-09T16:04:26.493 回答
0

不,您不能在 UI 线程之外访问它们。很少有 UI 元素可以从非 UI 线程访问,其中一个是 ProgressBar。

于 2013-09-09T16:01:36.400 回答
0

您可以在单独的线程中访问 UI 元素,但不能更新它们

您可以在非 UI 线程中更新 UI 元素的唯一方法是使用runOnUiThread或使用在单独线程中对 UI 线程进行回调,Handler除此之外,您不能在单独线程中更改 UI 元素

于 2013-09-09T16:04:14.307 回答
-1

不能在 UiThread 之外访问变量。如果您想从 UiThread 外部进行修改,请使用:

  • Activity.runOnUiThread(Runnable)

  • 一些“发布”方法存储等待 UiThread 处理的修改。您可以使用BlockingQueue例如。看看java.util.concurrent包装

  • 在极少数情况下,在 UiThread 之外修改变量不会产生错误,在这种情况下,从 UiThread 访问它是安全的。在其他情况下,变量应该是私有的,并且尝试在 UiThread 之外访问它们应该引发IllegalStateException或类似的事情。

于 2013-09-09T16:07:29.380 回答