下面的代码是相当的想法的伪代码。基本上,你会声明一个接口来检查接下来的三个AsyncTasks。您还需要维护一个计数器,以查看从AsyncTask收到的响应数是否乘以3.如果是,则可以触发接下来的三个AsyncTasks。
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();
}
}
}
也许,可以向监听器传递给你的3 asyntask并调用你的听众的方法在你3的AsyncTask的onPostExecute,当3的AsyncTask必须调用此方法,你可以启动你3下的AsyncTask来完成。而且我认为你应该使用一个服务而不是一个线程来发起你的asynctask。希望有所帮助。 – Illuyankas
我正在使用循环来排队任务,并且我无法找到一种方法让它暂停调用下一个任务。 –
如果我很好,Looper不会停下来。如果我不得不这样做,我通过服务获得你的任务列表(可以动态设置),并在同一时间启动3个任务,然后当他们完成重新启动startComand时,你有任务在队列或类似的东西。 – Illuyankas