使用RxJava在复杂条件下链接可观察对象

时间:2015-12-10 03:13:38

标签: android rx-java rx-android

我想在Android中构建一个启动画面。当加载启动画面时,图像加载器将尝试从服务器获取较新的启动图像,然后较新的图像将保存到本地存储并用作下一次启动的启动画面图像。启动画面将保持5秒,然后跳转到主要活动。此外,我们还需要在启动画面上使用倒计时计数器。

我可以使用Observable.interval在完成时关闭启动画面并在下一次发射时更新计数器。但是我应该在计数器启动时加载图像并且图像检索任务的超时也是5秒,如果我们无法获取图像,那么取消任务?

splash_sub = Observable
            .interval(SPLASH_INTERVAL, TimeUnit.SECONDS) //to emit event every 1s
            .take(SPLASH_DURATION) //limit the event number to 5, i.e. 5s to complete
            .subscribeOn(Schedulers.newThread()) //timer and event emitting run in background
            .observeOn(AndroidSchedulers.mainThread()) //subscriber callback run in UI thread
            .subscribe(new Observer<Long>() {
                @Override
                public void onCompleted() {
                    dismissSplash(); //dismiss the Splash Screen and enter the Main Activity
                }

                @Override
                public void onError(Throwable e) {
                    Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onNext(Long aLong) {
                    Log.d(TAG, aLong.toString());
                    textView.setText(String.format("%s", aLong));
                }
            });

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想加载图像,而不是在等待启示消失。

您拥有的更简单的选项,只需创建您的:

imageDownloadObservable
  .timeout(SPLASH_DURATION * SPLASH_INTERVAL, TimeUnit.SECONDS)
  .subscribe();

两者都会在同一时间发生。

如果你想在加载图片时解除启动或5s(第一次发生),可以使用合并操作符来完成。