Я использую библиотеку Android ReactiveLocation для получения регулярных обновлений местоположения. Я хочу продолжать получать обновления местоположения, даже если в моем приложении они не используются, чтобы у меня всегда была актуальная информация о местоположении, которую я мог бы использовать немедленно, если мне нужно.
Вот как я начинаю получать обновления местоположения в основном компоненте моего приложения. Я хочу повторно опубликовать последнее значение и любые новые обнаруженные местоположения любому подписчику, расположенному дальше по цепочке в моем приложении, и для этого предназначен replay(1)
.
locationProvider = new ReactiveLocationProvider(context);
locationObservable = locationProvider.getUpdatedLocation(locationRequest)
.replay(1);
В другом месте приложения я подписываюсь на эту переизданную наблюдаемую:
locationSubscription = locationObservable
.filter(new Func1<Location, Boolean>() {
@Override
public Boolean call(Location location) {
return location.getAccuracy() < LOCATION_ACCURACY_THRESHOLD;
}
})
.subscribe(new Action1<Location>() {
@Override
public void call(Location location) {
}
});
Похоже, это работает: моему конечному подписчику немедленно возвращается последнее местоположение, и он продолжает получать новые обновления, но я хочу убедиться, что я не создаю огромный буфер неиспользуемых местоположений где-то в цепочке, когда последний подписчик не подписан. Я нуб Rx. Как противодавление применимо к этой ситуации? Делает ли replay(1)
то, что я ожидаю, и отбрасывает все ненужные местоположения, кроме последнего?