2016-05-14 14 views
0

ボタンをクリックしたときに別々に実行したいと思うasynctasksを持っています。私は、ボタンがクリックされたときに、第1のものが既に終了するまで、第2のものが開始されないことを意味する。 ...2つの非同期タスクを次々と実行するにはどうすればよいですか?

if(task1.getStatus()==AsyncTask.Status.FINISHED){ 
task2.excecute(); 
} 

をしかし、それは動作しません

すべてのヘルプしてください:ところで は、私が使用することを試みましたか?

+1

'task1'の' onPostExecute'に 'task2.execute();'をつけることができます –

+0

2つのもの(AとB)を非同期にしたい場合は、 BがAの後ろに走るように、AとBを行う*単一のタスクを作成しないのはなぜですか? – Andreas

+0

@hamzaouiあなたは最初のタスクを呼び出してからonPostExecuteメソッドを作成し、PostExecuteメソッドで2番目のAsyntaskを呼び出す必要があります。それは解決する – Amitsharma

答えて

1

HONEYCOMB以降、​​を使用すると、「タスクは1つのスレッドで実行され、並列実行によって発生する一般的なアプリケーションエラーを回避します。つまり、AsyncTaskはデフォルトで1つずつ実行する必要があります。

http://developer.android.com/reference/android/os/AsyncTask.html

どのようにこれがそうでないことを確認していますか?

+0

しかし、私はmake:task1.execute(); task2.execute();彼らは同時に走ります、それは問題です! –

+0

同時に実行する方法をテストしたことがありますか? – Nathanael

0

if文は、条件が満たされるまで待機しません。それは条件を評価するだけであり、真の場合はifブロック内のステートメントを実行します。そうでない場合、スレッドはifブロックの後のステートメントを継続します。実際には、条件を待たなければなりません。

最も簡単な方法は、単に待ちループを実装するために、次のようになります。

while (task1.getStatus()!=AsyncTask.Status.FINISHED) 
{ 
    Thread.sleep(10); 
} 
task2.execute(); 

をしかし、このアプローチは、実際のスレッドがブロックしている主な欠点を持っています。

関連する問題