У меня есть приложение, которое использует методы из стороннего 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) и использовать лямбда-выражения?