当前位置:  开发笔记 > Android > 正文

使用RxAndroid安排

如何解决《使用RxAndroid安排》经验,为你挑选了1个好方法。

我正在使用RxAndroid observable来检索一些对象(在本例中为String).我的服务如下:

 public Observable getRandomString() {
    return Observable.create(new Observable.OnSubscribe() {
        @Override
        public void call(Subscriber subscriber) {

            //code to retrieve result

            subscriber.onNext("this is a string");
            subscriber.onCompleted();

        }
    });
}

我在演示者中订阅并将结果发布到视图中:

public void loadRandomString() {

    Observable observable = 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年发现了一些旧的解决方案,但目前很多代码都被弃用了.这可能是使用某种递归,还是我能以更优雅的方式实现这一点?

提前致谢!



1> Dan Lew..:

你可能想要的是什么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().

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有