Nie*_*orp 6 mvp android scheduled-tasks rx-java rx-android
我正在使用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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
我在演示者中订阅并将结果发布到视图中:
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
}
});
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我希望这个操作定期(每隔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...);
Run Code Online (Sandbox Code Playgroud)
也就是说 - 如果你每隔几分钟就要这样做一次,你可能最好不要去看看AlarmManager或JobScheduler,因为很可能用户不会在很长一段时间内专注于你的应用.
顺便说一句,它Observable.just("this is a string")比使用起来要容易得多Observable.create().
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |