我正在使用Android ReactiveLocation 库来接收定期位置更新。即使我的应用程序中没有任何东西在使用它们,我也想继续接收位置更新,这样我总是有一个最新的位置,我可以在需要时立即使用。
这就是我开始在我的应用程序的核心组件中获取位置更新的方式。我想将最新值和任何新检测到的位置重新发布给我的应用程序链中更下游的任何订阅者,这就是replay(1)
目的。
locationProvider = new ReactiveLocationProvider(context);
locationObservable = locationProvider.getUpdatedLocation(locationRequest)
.replay(1);
在应用程序的其他地方,我订阅了这个重新发布的 obervable:
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)
做我所期望的,并丢弃除最新位置之外的所有不需要的位置?