8

2 つのリストを結合する必要があり、それぞれが独自の非同期呼び出しの後に返されます。これらのような非同期呼び出しをどのように調整するのが最善ですか。別の非同期タスクが完了するまで待機する標準の SDK メソッドはありますか?

4

3 に答える 3

6

execute()call は のインスタンスを返します。AsyncTaskこのインスタンスを保存して、タスクが終了したかどうかを後で確認するgetStatus()ために、 を呼び出すと、コードは次のようになります。

final AsyncTask<...> first_task;
final AsyncTask<...> second_task;

public someMethod() {
    first_task = new MyFirstAsyncTask().execute();
    second_task = new MySecondAsyncTask().execute();
    // other things
}

private class MyFirstTask extends AsyncTask<...> {
    // business as usual

    protected void onPostExecute(SomeData[] result) {
        if( second_task != null && second_task.get_status() == AsyncTask.Status.FINISHED ) {
            // start the task to combine results
            ....
            //
            first_task = second_task = null;
        }
    }
}

private class MySecondTask extends AsyncTask<...> {
    // business as usual

    protected void onPostExecute(SomeData[] result) {
        if( first_task != null && first_task.get_status() == AsyncTask.Status.FINISHED ) {
            // start the task to combine results
            ....
            //
            first_task = second_task = null;
        }
    }
}

最後に終了したタスクは、新しいタスクを開始して結果を組み合わせることができます。

于 2012-04-24T01:38:36.353 に答える
0

Javaには、Futureクラスなどの優れた機能がいくつかあります。ここでこのフレームワークを説明するのは無駄です。ネット上には多くのリソースがあります。とにかく単一の非同期タスクを持っている方が良いかもしれませんが、実際には2つの非同期タスクを同時に実行する必要はありません。1つのdoInBackgroundで両方の部分を実行できます

于 2012-04-23T20:39:04.537 に答える
0

それは本当に必要に応じて異なります。

すべてのデータが到着するまで待つ必要がありますか? アクティビティで同期ブロック関数を使用して関数を呼び出すだけではない場合

はいの場合、一度だけ機能すると思いますか。したがって、合計で2つ(またはX)ですか?確認できるかもしれません: CoundDownLacth (http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)

于 2012-04-24T08:16:26.947 に答える