rxjava - 如何在创建后将Timer添加到observable

时间:2015-02-01 06:17:54

标签: timer rx-java

我想要捕获一个可观察到的加载添加并在几秒钟后显示它。我称这是多个地方,但在一个特定的地方,我希望它只在几秒钟后运行。这是我有的方法返回一个observable:

private Observable fullScreenAdObservable(){


    // Create the interstitial.
 return  Observable.create(new Observable.OnSubscribe<Object>() {
     @Override
     public void call(Subscriber<? super Object> subscriber) {
         interstitial = new InterstitialAd(main.this);
         interstitial.setAdUnitId(admob_publisherID);
         // Create ad request.
         AdRequest adRequest = new AdRequest.Builder().build();
         // Begin loading your interstitial.
         interstitial.loadAd(adRequest);
         interstitial.setAdListener(new AdListener() {
             @Override
             public void onAdLoaded() {
                 super.onAdLoaded();
                 interstitial.show();
             }
         });
     }
     });
 }

然后订阅我这样做但计时器失败了:

 fullScreenAdObservable().subscribe();//this works
fullScreenAdObservable().timer(0,3, TimeUnit.SECONDS).subscribe(); //this fails to react,why ?

我想让计时器在3秒后运行观察,但它不会,为什么?

1 个答案:

答案 0 :(得分:0)

使用延迟和计时器时似乎存在一些调度问题。因此,在调用delaySubscription或timer之前,我必须明确告诉我想要订阅什么线程。还修改了订阅者以侦听onNext,以便我可以向订阅者传递广告。然后我实际在onNext中展示了广告(因为它在延迟过后被触发。

private Observable fullScreenAdObservable(){

    // Create the interstitial.
 return  Observable.create(new Observable.OnSubscribe<Object>() {
     @Override
     public void call(final Subscriber<? super Object> subscriber) {
         interstitial = new InterstitialAd(main.this);
         interstitial.setAdUnitId(admob_publisherID);
         // Create ad request.
         AdRequest adRequest = new AdRequest.Builder().build();
         // Begin loading your interstitial.
         interstitial.loadAd(adRequest);
         interstitial.setAdListener(new AdListener() {
             @Override
             public void onAdLoaded() {
                 super.onAdLoaded();
                 //emit a loaded ad
                 subscriber.onNext(interstitial);                     
             }
         });
     }
 });
 }

//并调用它:

 fullScreenAdObservable().subscribeOn(AndroidSchedulers.mainThread()).
            delaySubscription(13, TimeUnit.SECONDS).subscribe(new Action1<InterstitialAd>() {
        @Override
        public void call(InterstitialAd ad) {
            ad.show();
        }
    });