【发布时间】:2019-01-18 04:53:36
【问题描述】:
我希望像这样一起执行两个 AsyncTask:
new FetchProjetsTask().execute(projets.getId());
new FetchDashBoardsTask().execute(dashBoards.getId());
如何等待它们都完成才能执行其他指令?
(我正在寻找一种类似于 onPostExecute 但适用于多个 AsyncTasks 的方法)
【问题讨论】:
我希望像这样一起执行两个 AsyncTask:
new FetchProjetsTask().execute(projets.getId());
new FetchDashBoardsTask().execute(dashBoards.getId());
如何等待它们都完成才能执行其他指令?
(我正在寻找一种类似于 onPostExecute 但适用于多个 AsyncTasks 的方法)
【问题讨论】:
如果您不想将头放在RxJava 和Executors/Futures 等新域中,您可以创建新的AsyncTask 并以阻塞方式调用这两个域。
doInBackground() {
Result resultProjects = new FetchProjetsTask().execute(projets.getId()).get();
Result resultDashboards= new FetchDashBoardsTask().execute(dashBoards.getId()).get();
// continue with necessary logic
}
请注意,get() can throw exceptions。但是,如果您不需要使用这两个任务的结果来完成,您可以使用闩锁实现解决方案,例如这里Wait for multiple AsyncTask to complete
【讨论】:
我的想法是利用向 AsyncTasks 提供您自己的executor 的可能性,使用
new FetchProjetsTask().executeOnExecutor(yourExecutor, projets.getId());
new FetchDashBoardsTask().executeOnExecutor(yourExecutor, dashBoards.getId());
然后使用 Executor 的awaitTermination 等待两个任务完成。
【讨论】: