2012-06-05 71 views
0

我讽刺之前,阻止主UI线程,这里是情景:如何在主UI线程被阻塞时显示progressdialog?

  1. 服务运行每天一次 - 大约需要15秒才能完成。重型数据库事务
  2. 巧合的是用户从数据库
  3. 主屏幕加载数据在此期间启动应用程序,但因为该数据库被锁定(步骤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 ...恢复!底线,我如何在让主线程进入睡眠状态之前显示一个指示符(进度对话框或对话框)?

我接受加载另一个活动直到服务恢复的解决方案。我已经尝试过,但以前的活动继续愉快:|

回答

3

如果阻塞UI线程,则无法显示进度对话框。

我想你想在onResume中调用对话框,但UI在onResume和onPaused完成之前不会开始显示对话框。但是,当你阻止OnResume中的UI线程时,直到阻塞结束才会达到此线程。因此它不可能。

您需要将异步任务中的等待以及完成时的回调传递给UI线程。 当数据库更新完成时,好的方法是开始一个启动实际活动的加载活动。

+0

谢谢 - 我会尝试创建一个“加载活动”的建议,并让你知道它是如何工作的。我需要找到一种方法来确保首先调用活动,即使用户转到主屏幕并返回。嗯... –

+0

这最终是最好的解决方案 –

相关问题