我在执行短时操作时尝试在活动中使用 ProgressBar 。而且我意识到,当我将 ProgressBar 可见性设置为true时,它仅在执行操作后才可见。
progressBar.setVisibility(View.VISIBLE);
calculate();
然后,我找到了必须在另一个 Thread 中设置 ProgressBar 可见性的解决方案。所以我的问题是:为什么必须在另一个 Thread 中设置它?
例如,如果我让 ProgressBar 在创建时具有真实可见性(在 onCreate()中),它将继续进行,并且我可以与 UI < / strong>。我认为它们是在一个线程中执行的,这没关系。但是在我看来,我错了。
答案 0 :(得分:1)
Android UI工具包不是线程安全的。这意味着您不得从辅助线程/后台线程操纵UI。您必须从UI(主)线程对用户界面进行所有操作。
Android UI工具包在android.widget
和android.view
包中包含元素
经验法则:
这在here
中有更详细的解释。使用AsyncTask或Loaders运行后台线程总是可以让您在后台线程分别返回onPostExecute()
和onLoadFinished()
时更新UI。
因此,关于您的问题,您必须从UI线程而不是其他线程更新ProgressBar
。