Android相当于iOS GCD dispatch_group API

use*_*648 13 multithreading android

我来自iOS背景,我是Android的新手.

是否有一种有效且快速的方法来进行相同的网络API调用,但每次将参数存储在数组中时都使用不同的参数.我只想在所有网络API调用完成后返回,但我不希望循环中的任何api调用阻止循环中的其他api调用.

我基本上想要相当于这个Swift代码.基本上,在所有网络呼叫getData成功或失败之前,以下功能不会返回.我将如何在Android中完成同样的事情?

func getDataForParameters(array: NSArray) {
    let group = dispatch_group_create()
    for (var i = 0; i < array!.count(); i++) {
        let param = array![i]
        dispatch_group_enter(group)

        getData(param, success: {
            () in
            dispatch_group_leave(group)

            }, failure: {
                () in
                dispatch_group_leave(group)
        })
    }
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
}
Run Code Online (Sandbox Code Playgroud)

Erc*_*can 6

您有多种方法可以实现这一目标。

  1. 您可以Thread.join()在使用线程的情况下使用
  2. 您可以使用RxJava之类的第三方库。
  3. 您可以编写自己的事件分配器,这是一个丑陋的例子
  4. 答案还涵盖了您的问题CallableFuture