0

当我执行短时间操作时,我尝试在我的Activity中使用ProgressBar 。而且我意识到,当我将ProgressBar的可见性设置为 true 时,它​​只有在执行操作后才变得可见。

progressBar.setVisibility(View.VISIBLE);
calculate();
  

然后我找到了必须在另一个Thread中设置ProgressBar可见性的解决方案。所以我的问题是:为什么我必须在另一个线程中设置它?

例如,如果我在创建时(在onCreate()中)让我的ProgressBar具有真正的可见性,它会继续进行并且我可以在那一刻与UI交互。我得出的结论是它们在一个线程中执行,没关系。但在我看来我错了。

4

1 回答 1

1

Android UI 工具包不是线程安全的。这意味着您不能从工作线程/后台线程操作您的 UI。您必须从 UI(主)线程对用户界面进行所有操作。

Android UI 工具包包含android.widget&android.view包中的元素

经验法则:

  1. 不要阻塞 UI 线程(不要在 UI 线程中运行未指定时间的操作)
  2. 不要从 UI 线程外部访问 Android UI 工具包

这在这里有更详细的解释

使用AsyncTaskLoaders运行后台线程始终允许您在后台线程导致它们的onPostExecute()和时更新您的 UI onLoadFinished()

因此,就您的问题而言,您必须ProgressBar从 UI 线程而不是其他线程更新您的。

于 2019-02-22T20:27:43.567 回答