0

在我被讽刺之前,为了阻塞主 UI 线程,这里是场景:

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

我对加载另一个活动直到服务恢复的解决方案持开放态度。我已经尝试过了,但是之前的活动继续愉快地进行:|

4

1 回答 1

3

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

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

您需要将等待放在异步任务中,并在完成后回调您的 UI 线程。好的是在数据库更新完成时进行加载活动来启动您的实际活动。

于 2012-06-05T15:46:20.553 回答