gpt4 book ai didi

android - 我怎样才能启动两个异步线程,一旦它们都完成就加入共同执行?

转载 作者:太空狗 更新时间:2023-10-29 12:50:15 25 4
gpt4 key购买 nike

我正在为以下场景寻找设计模式或方法。我希望启动两个单独的后台线程以从不同来源检索数据。然后,我希望在两个后台线程完成其工作后调用一个方法(在 UI 线程上)。由于必须将来自两个来源的数据结合起来才能发挥作用,因此我必须等到两者都完成检索后才能处理数据。我如何在 Android 平台上实现这一目标?

最佳答案

编辑:我的第一个版本一直困扰着我,我不喜欢它必须添加的 bool 值,所以这是另一个版本。在每个添加的任务的 onPostExecute 中使用 this 调用它。

ArrayList<AsyncTask> tasks;

public void doStuffWhenDone(AsyncTask finishedTask)
{
tasks.remove(finishedTask);
if(tasks.size() > 0)
return;

... do stuff
}

我也会保留旧的,因为它们都可以工作,但我认为上面的要干净得多。现在去整理我之前的一个项目。

ArrayList<AsyncTask> tasks;
boolean hasBeenDone = false;

public void doStuffWhenDone()
{
for(int i=0;i<tasks.size();i++)
if(hasBeenDone || (tasks.get(i).getStatus() != AsyncTask.Status.FINISHED))
return;

hasBeenDone = true;
... do stuff
}

无论您有多少任务,它都可以轻松扩展,并且不需要线程来处理线程。只需在每个任务结束时调用该方法。如果不是最后一个完成,则什么也不会发生。

编辑:好点,但我认为它不需要是原子的。由于 AsyncTasks 的两个 onPostExecute 方法都在 UI 线程上运行,因此它们将被一个接一个地调用。

关于android - 我怎样才能启动两个异步线程,一旦它们都完成就加入共同执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12849048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com