保持调用线程直到多个异步任务完成



我有一个后台线程,它调用3个异步任务来同时执行任务。调用线程充当这3组任务的队列。

因此,基本上我需要同时调用3个异步任务,一旦它们完成,我想调用队列上的下三个任务并重复。

然而,在三个异步任务完成之前,我很难暂停调用线程。因此,队列中的下三个任务在前三个任务完成之前就开始运行。

那么,在异步任务完成之前,是否还有保持调用线程的方法。我知道你可以在asynctask中使用.get(),但它不会使这三个异步任务同时运行。

下面的代码是这个想法的伪代码。基本上,您将声明一个接口,该接口将检查是否触发接下来的三个AsyncTasks。您还需要维护一个计数器,以查看从AsyncTask接收到的响应数是否乘以3。若是这样,那个么您就可以触发接下来的三个异步任务。

public interface OnRunNextThree{
     void runNextThreeTasks();
}
public class MainClass extends Activity implements OnRunNextThree {
    private int asyncTasksCounter = 0;
    public void onCreate() {
        //Initiate and run first three of your DownloadFilesTask AsyncTasks
        // ...
    }
    public void runNextThreeTasks() {
        if (asyncTasksCounter % 3 == 0) {
            // you can execute next three of your DownloadFilesTask AsyncTasks now
            // ...
        } else {
            // Otherwise, since we have got response from one of our previously 
            // initiated AsyncTasks so let's update the counter value by one. 
            asyncTasksCounter++;
        }
    }
    private class DownloadFilesTask extends AsyncTask<Void, Void, Void> {
        private OnRunNextThree onRunNextThree;
        public DownloadFilesTask(OnRunNextThree onRunNextThree) {
            this.onRunNextThree = onRunNextThree;
        }

        protected Void doInBackground(Void... voids) {
            // Do whatever you need to do in background
            return null;
        }
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //Got the result. Great! Now trigger the interface.
            this.onRunNextThree.runNextThreeTasks();
        }
    }
}

异步任务旨在异步完成任务。。。。所以这不能以直接的方式进行。。。

即使您设法做到了这一点,它也基本上击败了异步操作的全部要点。

您应该查找同步网络操作。

查看Volley。。。这是一个专门为网络操作而制作的谷歌库,它支持同步操作

http://www.truiton.com/2015/02/android-volley-making-synchronous-request/

还有许多其他可用的库改装是另一个不错的库。。

相关内容

  • 没有找到相关文章

最新更新