【问题标题】:How to execute instructions after multiple parallel AsyncTasks have finished running?多个并行 AsyncTask 运行完成后如何执行指令?
【发布时间】:2019-01-18 04:53:36
【问题描述】:

我希望像这样一起执行两个 AsyncTask:

new FetchProjetsTask().execute(projets.getId());
new FetchDashBoardsTask().execute(dashBoards.getId());

如何等待它们都完成才能执行其他指令?
(我正在寻找一种类似于 onPostExecute 但适用于多个 AsyncTasks 的方法)

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    如果您不想将头放在RxJavaExecutors/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

    【讨论】:

      【解决方案2】:

      我的想法是利用向 AsyncTasks 提供您自己的executor 的可能性,使用

      new FetchProjetsTask().executeOnExecutor(yourExecutor, projets.getId());
      new FetchDashBoardsTask().executeOnExecutor(yourExecutor, dashBoards.getId());
      

      然后使用 Executor 的awaitTermination 等待两个任务完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 2017-10-30
        • 1970-01-01
        相关资源
        最近更新 更多