如何实现请求队列?

时间:2017-06-23 16:42:36

标签: android rx-java rx-android

我有一个应用程序,它使用第三方SDK的方法(异步方法向远程服务器发出HTTP请求)和Retrofit2 + OkHttp + Rx直接访问此服务器。它看起来像这样:

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和来自Retrofit)的限制 - 5请求,最多1秒。超过此限制时,请在继续之前等待。

如何实施?首先想到的是 - 添加Service和BroadcastReceiver。但它对我来说并不是那么懒惰:我应该在每个活动片段中监听这个BroadcastReceiver,而且这个实现没有那么有用的回调。是否可以使用Rx实现它(也包括SDK方法)并使用lambdas?

1 个答案:

答案 0 :(得分:1)

您可以使用信号量轻松完成此操作,无需额外的线程或服务。

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