我有一个后台线程,它调用3个asynctasks来同时执行任务。调用线程充当3组这些任务的队列。
所以基本上我需要同时调用3个asynctasks,一旦完成,我想调用队列中的下三个任务并重复。
然而,我无法暂停调用程序线程,直到三个asynctask结束。结果,队列中的后三个任务在前三个任务完成之前开始运行。
无论如何都要保持调用者线程直到asynctasks完成。我知道你可以在asynctask中使用.get()但它不会同时运行三个asynctasks。
答案 0 :(得分:1)
以下代码是该想法的伪代码。基本上,您将声明一个接口,该接口将检查是否触发了下三个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();
}
}
}
答案 1 :(得分:0)
异步任务意味着异步执行....所以这不能直接完成......
即使你设法做到这一点,它基本上也会失败异步操作的全部内容。
您应该寻找同步网络操作。
查看排球 ...这是专为网络运营而设的谷歌库,它支持同步操作
http://www.truiton.com/2015/02/android-volley-making-synchronous-request/
还有许多其他图书馆...... 改造是另一个好的图书馆..