使用 RxAndroid 调度
Use scheduling with RxAndroid
我正在使用 RxAndroid observable
来检索一些对象(在本例中为 String)。我的服务如下所示:
public Observable<String> getRandomString() {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//code to retrieve result
subscriber.onNext("this is a string");
subscriber.onCompleted();
}
});
}
我订阅了我的演示者,post 视图的结果:
public void loadRandomString() {
Observable<String> observable = mService.getRandomString();
observable
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(new Subscriber<String>() {
@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<String>
中,如下所示:
Observable.interval(3, TimeUnit.MINUTES)
.flatMap(new Func1<Long, Observable<String>>() {
@Override
public Observable<String> call(Long ignore) {
return getRandomString();
}
})
.subscribe(...insert your subscriber here...);
就是说 - 如果您打算每隔几分钟执行一次此操作,您最好研究一下 AlarmManager or JobScheduler,因为用户很可能不会长时间关注您的应用一段时间。
顺便说一句,使用 Observable.just("this is a string")
比 Observable.create()
更容易。
我正在使用 RxAndroid observable
来检索一些对象(在本例中为 String)。我的服务如下所示:
public Observable<String> getRandomString() {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//code to retrieve result
subscriber.onNext("this is a string");
subscriber.onCompleted();
}
});
}
我订阅了我的演示者,post 视图的结果:
public void loadRandomString() {
Observable<String> observable = mService.getRandomString();
observable
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(new Subscriber<String>() {
@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<String>
中,如下所示:
Observable.interval(3, TimeUnit.MINUTES)
.flatMap(new Func1<Long, Observable<String>>() {
@Override
public Observable<String> call(Long ignore) {
return getRandomString();
}
})
.subscribe(...insert your subscriber here...);
就是说 - 如果您打算每隔几分钟执行一次此操作,您最好研究一下 AlarmManager or JobScheduler,因为用户很可能不会长时间关注您的应用一段时间。
顺便说一句,使用 Observable.just("this is a string")
比 Observable.create()
更容易。