2016-08-03 11 views
13

私はiOSの背景から来て、私はAndroidが初めてです。iOS GCDディスパッチ_グループAPIのAndroidに相当

パラメータが配列に格納されるたびに、異なるネットワークパラメータを使用して同じネットワークAPI呼び出しを効率的かつ迅速に行う方法はありますか。私はすべてのネットワークAPI呼び出しが完了したときに戻ってみたいと思いますが、ループ内の他のAPI呼び出しをブロックするためにループ内のapi呼び出しをしたくありません。

私は基本的に、このスウィフトコードに相当するものを求めています。基本的には、以下の関数はすべてのネットワークコール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) 
} 
+0

ExecutorServiceを使用して、他のネットワークコールをブロックすることなく複数のタスクを実行することができます – has19

答えて

4

これを達成する方法はたくさんあります。

  1. あなたは、あなたがRxJavaのようなサードパーティのライブラリを使用できるスレッド
  2. を使用している場合にはThread.join()を使用することができます。
  3. あなたはここに独自のイベントディスパッチャを書くことができ、ループ内のネットワーク呼び出しは、あなたが他のネットワーク呼び出しをブロックしてはならない場合は醜いexample
  4. あるこのanswerも、あなたの質問CallableFuture
+1

これらはすべて動作しますが、RxJavaはIMHOです – GreyBeardedGeek

1

をカバーすべきですネットワークを非同期で呼び出します。

Googleのバレーネットワークライブラリを使用してネットワークを呼び出すことができ、それらは非同期で実行されます。ボレーの

の下のリンクに従ってください。

成功または失敗のコールバックで増分するカウンタを実装できる場合は、その変数を使用して呼び出し元メソッドに戻るまでの時間を判断できます。

ネットワークコールは非同期的に行われるため、コールバックインターフェイスを作成する必要があります。このインターフェイスは、カウンタ条件が満たされたときに呼び出され、コールバックメソッドを呼び出します。 Androidでのコールバックメカニズムの使用方法に関する多くの例が見つかります。コールバック関数は、IOSのDelegate関数に似ています。

私はこれが役立つことを願っています。

関連する問題