2016-08-27 14 views
-4

もう一方の非同期タスクを実行したいです。ここで、非同期タスク2が実行されるかどうかは、非同期タスクの値によって決まります。 (X == 2)はA1の前に実行される場合には条件が終了したので、ここで は私が私の理解によると1つの非同期タスクを1つずつ実行するにはどうすればよいですか?

int x=0; 
x=new A1().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 
(Here x is just for the sake of explanation and making it simple, take it as a pseudo code rather than actual code) 
if (x==2) 
new A2().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 

を達成したいものです、ここで、xの値が0以外になることはありません。 A1タスクが終了したときにif(x == 2)が実行されるようにします。

私は、A1のonPostExecute内でA2を実行するとそのトリックが実行されますが、私の状況ではA2を単独で実行する必要があることが分かりました。

+1

をだから、唯一のあなたはそれをしたい場合にはA2で後に実行を埋めますか? – chrylis

+0

@chrylisこれはほんの一例であった。 #相互にリンクされた3-4の非同期タスクがあります。 #入力値が変更されることがあります。これらの非同期タスクの入力は、互いに依存してもよいし、依存しなくてもよい。実用的ではありません。私は現在それを使用しています。そしてそれを使用し続けるために、私は非常に小さな変更を加えて多くのものを貼り付けなければならないでしょう。 Post Executeの中に入れないで、やり方を知っていますか? –

+0

本当に4 'AsyncTasks'を実行する必要がありますか、それとも4つのことを順番に行う必要がありますか? 'onPostExecute'で物事を連鎖させるよりも、おそらくもっとクリーンなアプローチがあるでしょう。 –

答えて

0

最初のAsyncTaskのonPostExecute()メソッドの中で2番目のasyncTaskを実行する必要があります。

+0

詳細をお読みください –

+0

上記で指摘したように、あなたの質問の詳細は完全に間違っています! –

+0

何が間違っていますか? –

0

AsyncTaskの中で作業できます。

private class WorkerTask extends AsyncTask<Runnable, Void, Void> { 

     @Override 
     protected Void doInBackground(Runnable... runnables) { 
      for (Runnable task : runnables) { 
       task.run(); 
       publishProgress(); 
      } 
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
      //update ui 
      super.onProgressUpdate(values); 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      //done 
      super.onPostExecute(aVoid); 
     } 
} 

をそして、あなたがそうのようにこれを使用します:私たちのパラメータとしてRunnableを使用して

Runnable taskOne = new Runnable() { 
    @Override 
    public void run() { 
     doSomeWork(); 
    } 
}; 

Runnable taskTwo = new Runnable() { 
    @Override 
    public void run() { 
     doSomeMoreWork(); 
    } 
}; 

new WorkerTask().execute(taskOne, taskTwo); 
+0

実行可能ファイルは必要ですか?シンプルなインターフェース/リスナーはしませんか? –

+0

これは必須ではありませんが、 'WorkerTask'は作業の詳細を知る必要がないように' WorkerTask'を切り離します。リスナーパターンを使用することもできます。単にonProgressUpdateまたはonPostExecuteからUIコードを呼び出していることを確認してください –

関連する問題