2013-07-05 206 views
0

我有一個異步任務正在運行,並且其中我將從連接的設備獲取結果。異步任務應該在收到結果後終止並執行onPostExcute。有沒有辦法執行這樣的等待流程直到有答覆?謝謝異步任務問題(等待結果)

private void getData(){ 
    final Context con = this.getActivity(); 
    String tmp; 
    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 
     private ProgressDialog pd; 
     @Override 
     protected void onPreExecute() { 
      pd = new ProgressDialog(con); 
      pd.setTitle("Scanning..."); 
      pd.setMessage("Please wait."); 
      pd.setCancelable(false); 
      pd.setIndeterminate(true); 
      pd.show(); 
     } 
     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       tmp = Control.getReply(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Void result) { 
      pd.dismiss(); 
      startTestModeControl(tmp); 
     } 
    }; 
    task.execute((Void[])null); 
} 
+2

這是默認行爲。它將掛起,直到完成Control.getReply(),除非這也是一種與偵聽器一起工作的異步方法。 –

+0

我不知道你連接了哪個設備,如果你有一個可以修改的程序,反正我會用流來完成。您只需發送一些內容並等待回覆,這是一個阻止調用,AsyncTask無法繼續前進,直到獲得回覆。 –

回答

0

您正在尋找一些lika a Listener/Observer。所以看看Observerpattern。這樣做會異步地使對象處理自己的AsyncTask或Thread中的數據,並使用onPostExecute()通知監聽器結果已準備就緒。

如果您正在尋找一種派發結果的方式,並且Listener/Observer模式不是您正在尋找的模式,那麼您可以使用Android的Hander類。

+0

嗨sockeqwe,我認爲聽衆/觀察員是我正在尋找。我想我會用一個監聽器接口來實現它。有沒有一種方法可以讓異步任務執行onPostExecute當我通過我的界面通知? – sean

+0

@sean檢查這個http://stackoverflow.com/questions/17398837/processdialog-is-not-appearing-適當如果它有幫助。 – Raghunandan