如何在主UI线程被阻止时显示progressdialog?

时间:2012-06-05 15:38:06

标签: android database thread-safety

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

  1. 服务每天运行一次 - 大约需要15秒才能完成。繁重的数据库交易
  2. 巧合的是,用户在此期间启动应用程序
  3. 主屏幕加载数据库中的数据
  4. 但由于数据库已锁定(步骤1),因此会引发错误。
  5. 所以我需要FREEZE 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才会显示......恢复!最重要的是,在我让主线程进入睡眠状态之前,如何显示指示器(progressdialog或对话框)?

    我愿意接受加载其他活动的解决方案,直到服务恢复。我已经尝试过了,但之前的活动继续开心:|

1 个答案:

答案 0 :(得分:3)

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

我想你想在onResume中调用对话框,但是在onResume和onPaused完成之前,UI不会开始显示对话框。但是当您阻止OnResume中的UI线程时,在阻塞结束之前将无法访问。因此不可能。

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