在繁忙的 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的主要内容,如果未能解决你的问题,请参考以下文章