簡體   English   中英

Android如何同步兩個異步任務?

[英]Android How to Sync Two Async tasks?

我需要合並兩個列表,每個列表在其自己的獨立異步調用之后返回。 如何最好地協調這樣的異步調用。 是否有標准的SDK方法可以等待另一個異步任務完成?

execute()調用返回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;
        }
    }
}

最后完成的任務可以啟動新任務以合並結果。

Java有一些不錯的東西,例如Future類之類。 這里沒有描述這個框架的用處,網上有很多資源。 最好有一個異步任務,但實際上不必同時運行兩個異步任務。 您可以在一個doInBackground中完成這兩個部分

這確實取決於需要。

您是否需要等待所有數據到達? 如果不只是通過活動中的同步塊功能來調用您的函數

如果是,您是否希望它們僅工作一次; 因此總共兩個(或X個)? 也許您可以檢查:CoundDownLacth(http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM