当我执行短时操作时,我尝试在Activity中使用ProgressBar。我意识到,当我将ProgressBar可见性设置为true时,它仅在执行操作后才可见。
progressBar.setVisibility(View.VISIBLE);
calculate();
然后我找到了解决方案,我必须在另一个Thread中设置ProgressBar可见性。所以我的问题是:为什么我必须在另一个线程中设置它?
例如,如果我让ProgressBar在创建时保持真正的可见性(在onCreate()中),它将会进展,我可以在那一刻与UI进行交互。我发现它们在一个线程中执行并且没关系。但在我看来,我错了。
Android UI工具包不是线程安全的。这意味着您不得从工作者/后台线程操纵UI。您必须从UI(主)线程对您的用户界面进行所有操作。
Android UI工具包包含android.widget
和android.view
包中的元素
经验法则:
这在here中有更详细的解释
使用AsyncTask或Loaders运行后台线程总是允许你在后台线程上分别更新你的用户界面onPostExecute()
和onLoadFinished()
。
因此,截至您的问题,您必须从UI线程更新您的ProgressBar
而不是从其他线程更新。