2012-06-05 97 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

這最終是最好的解決方案 –

相關問題