如何在主UI线程被阻塞时显示progressdialog?
问题描述:
我讽刺之前,阻止主UI线程,这里是情景:如何在主UI线程被阻塞时显示progressdialog?
- 服务运行每天一次 - 大约需要15秒才能完成。重型数据库事务
- 巧合的是用户从数据库
- 主屏幕加载数据在此期间启动应用程序,但因为该数据库被锁定(步骤1),这将引发一个错误。
所以我需要冻结UI线程,直到服务完成。没有AsyncTask,因为UI将继续执行并抛出错误。我设法让“onResume”功能休眠直到服务完成。但在那段时间内,我无法显示任何对话框告诉用户等待或任何进度条告诉用户坐下。
如果我尝试
start onResume
if (service is running?)
show progress dialog
while the service is running, thread.sleep
dismiss progress dialog
end onResume
线程睡眠很好,醒来很大。但该死的进度对话框不显示,直到onResume ...恢复!底线,我如何在让主线程进入睡眠状态之前显示一个指示符(进度对话框或对话框)?
我接受加载另一个活动直到服务恢复的解决方案。我已经尝试过,但以前的活动继续愉快:|
答
如果阻塞UI线程,则无法显示进度对话框。
我想你想在onResume中调用对话框,但UI在onResume和onPaused完成之前不会开始显示对话框。但是,当你阻止OnResume中的UI线程时,直到阻塞结束才会达到此线程。因此它不可能。
您需要将异步任务中的等待以及完成时的回调传递给UI线程。 当数据库更新完成时,好的方法是开始一个启动实际活动的加载活动。
谢谢 - 我会尝试创建一个“加载活动”的建议,并让你知道它是如何工作的。我需要找到一种方法来确保首先调用活动,即使用户转到主屏幕并返回。嗯... –
这最终是最好的解决方案 –