在繁忙的 UI 线程上运行 ProgressBar

Posted

技术标签:

【中文标题】在繁忙的 UI 线程上运行 ProgressBar【英文标题】:Running ProgressBar on busy UI thread 【发布时间】:2015-10-21 15:14:33 【问题描述】:

我需要在 UI 线程上完成一些工作,但这意味着我也不能(据我所知)显示 ProgressBar,因为 UI 正忙于执行其他任务。

我知道这听起来有点不合逻辑,但是有没有办法在 UI 线程忙时在 UI 线程上显示不确定的 ProgressBar

我知道使用 Runnables 和 AsyncTasks,如果可以的话,我会使用它们来完成实际工作,但是它们可以用于显示 ProgressBar 本身吗?

【问题讨论】:

【参考方案1】:

只需显示一个带有 Loading... 的文本视图,或其他一些静态视图(带有进度的图像视图,不会旋转)。任何其他解决方案都需要在 UI 上完成工作。

我真的会检查我的代码以释放 UI,因为如果你使用 UI 的时间过长,用户将无法按回或任何操作,并且他会感觉到应用程序被卡住了。

【讨论】:

好主意 :) 确保在开始繁重的工作之前显示此视图。 感谢您的建议!我想这不是最漂亮的选择...但是是的,理想情况下 UI 不会被阻止...【参考方案2】:

简短的回答是否定的。

如果您的 UI 线程因工作繁重而阻塞,则 UI 不会更新。

但我相信您可以改进您的代码,使其不会阻塞 UI 线程。

【讨论】:

【参考方案3】:

是的,您可以在 AsyncTask 的帮助下在 UI 线程上显示一个不确定的 ProgressBar。

onPreExecute() 
    // Display Progressbar here


doInBackground() 
    // Do some heavy task here, but not related to UI thread


onPostExecute() 
     // Dismiss the Progressbar

【讨论】:

以上是关于在繁忙的 UI 线程上运行 ProgressBar的主要内容,如果未能解决你的问题,请参考以下文章

ProgressBar从另一个线程更新

使用另一个线程时,ProgressBar 不显示

UI控件之ProgressBar(进度条)

Android之ProgressBar初步应用

更改在运行时添加的 ProgressBar 的宽度

如何检查是不是在 Android 的 UI 线程上运行? [复制]