我想要捕获一个可观察到的加载添加并在几秒钟后显示它。我称这是多个地方,但在一个特定的地方,我希望它只在几秒钟后运行。这是我有的方法返回一个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秒后运行观察,但它不会,为什么?
答案 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();
}
});