2012-05-09 134 views
0

我有一個很長的進程在AsyncTask內部運行,但它可能需要在處理時確認用戶的東西。我知道如何顯示確認對話框,但我如何檢索輸出並保持等待直至使用確認?在AsyncTask中確認對話框(警報)

this.runOnUiThread(new Runnable() { 
      public void run() { 
       boolean output = ConfirmUser(message); 
      } 
     }); 

回答

3

我會說這是個壞主意。如果你需要用戶的確認,你最好將你的AsyncTask分爲兩部分:首先做一些部分,然後在onPostExecute()中顯示對話框(因爲它在ui線程上運行),並根據用戶操作啓動第二個AsyncTask。

如果您仍然想這樣做一個的AsyncTask,你可以做這樣的:

final BlockingQueue<Boolean> queue = new ArrayBlockingQueue<Boolean>(1); 
this.runOnUiThread(new Runnable() { 
    public void run() { 
     // Assuming you have ConfirmUser method which returns boolean 
     queue.add(ConfirmUser(message)); 
    } 
}); 


Boolean result = null; 
try { 
    // This will block until something will be added to the queue 
    result = queue.take(); 
} catch (InterruptedException e) { 
    // deal with it 
} 
+0

完美!謝謝,btw分裂AsyncTask是不可能與當前的設計,但我會考慮如果可能或需要更好的方法。 – xmen

+0

有一件事要問,當InterruptedException會被拋出? – xmen

+0

+1好的答案! – yorkw