2011-09-13 20 views
0

私のような方法があります:Androidで2回のasyncTask呼び出しの後に文を呼び出す方法はありますか?

void doStuffs() { 
    new asyncCall1().execute(); 
    new asyncCall2().execute(); 
} 

2つの非同期呼び出しが終了した後にどのように私は別のメソッドを呼び出すことができますか?

+0

意味するかに行くべきですか? –

+0

2番目のasyncTaskのonPostExecute()メソッドから呼び出すことができます。 –

答えて

2

は、第三非同期タスクに完了するの仕事を待つgetメソッドを使用します。

(new AsyncTask<Void, Void, Void>() { 

     @Override 
     protected Void doInBackground(Void... params) { 

      asyncCall1.execute((Void)null); 
      asyncCall2.execute((Void)null); 

      try { 
       asyncCall1.get(); 
       asyncCall2.get(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       e.printStackTrace(); 
      } 

      return (Void)null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
     } 



    }).execute((Void)null); 
+0

'get()'はUIスレッドをブロックするのですか、それとも単にルーパーに戻ってイベントを待つだけですか? –

+0

私はソースをチェックしていませんが、呼び出しスレッドをブロックしているようです。 –

0

たぶんonPostExecute呼び出さAsyncTaskの両方にでHandlerを渡し、ハンドラにロジックを構築:

Handler asyncTaskHandler = new Handler() { 
    private boolean firstTaskComplete = false; 
    @Override 
    public void handleMessage(Message msg) { 
     synchronized (firstTaskComplete) { 
      if(!firstTaskComplete) { 
       firstTaskComplete = true; 
      } else { 
       // call some other code 
      } 
     } 
    } 
}; 
0

AsyncTaskからメソッドを呼び出す必要があります。最も簡単な方法は、アクティビティー内のパブリック静的メソッドでステートメントをラップすることです。それ以外の場合は、AsyncTaskにアクティビティへの参照を渡すことができます。それはハンドラ

にどちらの方法を使用することです行うにclassiestの方法は、あなたのAsyncTaskはあなたが完了した後、いくつかの追加処理を実行するために両方のタスクを待ちたい

@Override 
onPostExecute(Result r) 
{ 
    //logic goes here 
} 
関連する問題