我有一个应用程序,它使用第三方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?
答案 0 :(得分:1)
您可以使用信号量轻松完成此操作,无需额外的线程或服务。
Semaphore s = new Semaphore(40);
...
s.acquire();
try {
dispatcher.dispatchRpcRequest(); // Or whatever your remote call looks like
} finally {
s.release();
}