我正在使用RxAndroid observable
来检索一些对象(在本例中为String).我的服务如下:
public ObservablegetRandomString() { return Observable.create(new Observable.OnSubscribe () { @Override public void call(Subscriber super String> subscriber) { //code to retrieve result subscriber.onNext("this is a string"); subscriber.onCompleted(); } }); }
我在演示者中订阅并将结果发布到视图中:
public void loadRandomString() { Observableobservable = mService.getRandomString(); observable .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe(new Subscriber () { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mMainView.onError(e.getLocalizedMessage()); } @Override public void onNext(String string) { //do something with string } }); }
这工作正常,但我希望这个操作定期(每隔x分钟).我可以一次又一次地使用Timer
或者ScheduledThreadPoolExecutor
这样做但是我想看看RxAndroid领域内是否有一些解决方案.我从2013年发现了一些旧的解决方案,但目前很多代码都被弃用了.这可能是使用某种递归,还是我能以更优雅的方式实现这一点?
提前致谢!
你可能想要的是什么Observable.interval()
.它以定时间隔发出.然后,您可以将其平面映射到您的中Observable
,如下所示:
Observable.interval(3, TimeUnit.MINUTES) .flatMap(new Func1>() { @Override public Observable call(Long ignore) { return getRandomString(); } }) .subscribe(...insert your subscriber here...);
也就是说 - 如果你每隔几分钟就要这样做一次,你可能最好不要去看看AlarmManager或JobScheduler,因为很可能用户不会在很长一段时间内专注于你的应用.
顺便说一句,它Observable.just("this is a string")
比使用起来要容易得多Observable.create()
.