2017-06-23 15 views
0

サードパーティSDKのメソッド(非同期メソッドを使用してリモートサーバーにHTTPリクエストを送信する)とRetrofit2 + OkHttp + Rxを使用してこのサーバーに直接アクセスするアプリケーションがあります。 - 1秒、最大で5要求要求キューを実装する方法は?

new SdkRequest("some", "arguments", "here") 
    .setCompleteListener(this::onGetItemsComplete) 
    .setErrorListener(this::onGetItemsError) 
    .getItems(); // Here is can be differents methods (getShops, getUsers, etc) 

ApiManager.getInstance() 
    .getApi() 
    .addAdmin("some", "another", "arguments", "here") // Methods which not presented in SDK we should call directly 
    .subscribeOn(Schedulers.io()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(this::onAddAdminComplete, this::onAddAdminError); 

私は限界がすべての要求(SDKからとレトロフィットから)ことが必要です。それはこのようになります。この制限を超えた場合、要求は続行する前に待機する必要があります。

これを実装する方法は?最初に気になることは、ServiceとBroadcastReceiverを追加することです。しかし私にとってはそれほど怠惰ではありません。すべてのアクティビティの断片でこのBroadcastReceiverを聴くべきです。この実装では有用なコールバックはありません。それはRx(ラップSDKメソッドも)とラムダを使用して実装することは可能ですか?

答えて

1

セマフォを使用すると、余分なスレッドやサービスを必要とせずに簡単に実行できます。

Semaphore s = new Semaphore(40); 
... 
s.acquire(); 
try { 
    dispatcher.dispatchRpcRequest(); // Or whatever your remote call looks like 
} finally { 
    s.release(); 
} 
+0

ありがとうございました。少し説明していただけますか?ディスパッチャオブジェクトとは何ですか? UIスレッドで使用できますか? – BArtWell

+1

スクリーンやイベントが実行されたり、コードビハインドでメソッドが呼び出されたりすると、UIスレッドとUIスレッドキューで呼び出されたメソッドがDispatcherキューにキューイングされます。 – Dhiyaneshwaran

+0

AndroidリファレンスでDispatcherクラスに関する情報が見つかりません。どこでこれについての情報を入手できますか? – BArtWell

関連する問題