android– 为什么我的计时器Observable从未调用过?

android– 为什么我的计时器Observable从未调用过?,第1张

概述在Android上,我编写了一个Observable,应该在2000毫秒后调用一次,但是从未调用过.Observable.timer(2000,TimeUnit.MILLISECONDS)//wait2000msec.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).flatMap(new

在Android上,我编写了一个Observable,应该在2000毫秒后调用一次,但是从未调用过.

    Observable.timer(2000, TimeUnit.MILliSECONDS) // wait 2000 msec            .subscribeOn(Schedulers.newThread()).observeOn(AndroIDSchedulers.mainThread())            .flatMap(new Func1<Long, Observable<?>>() {        @OverrIDe public Observable<?> call(Long aLong) {            continuePlayback(); // this line is never called            return null;        }    });

我希望Observable等待主线程,然后在主线程上调用continuePlayback().上下文帮助允许我在timer和flatMap之间放置subscribeOn / observeOn.这个对吗?这里真的发生了什么,我做错了什么?

电话会议后Observable会发生什么?它会保持活着还是我需要以某种方式明确地撕下它,例如调用OnCompleted()?

解决方法:

默认情况下,大多数Obsersable都是被动的,如果他们订阅,他们只会发出物品.在您的代码示例中,您没有订阅Observable.因此,它实际上从未开始发射物品,或者在这种情况下是2000毫秒后的唯一物品.

flatMap只是一个帮助 *** 作数据流的运算符,但它不会订阅您的Observable流.

您应该使用对subscribe的调用替换它,而不是使用flatMap.

Observable.timer(2000, TimeUnit.MILliSECONDS)    .subscribeOn(Schedulers.newThread())    .observeOn(AndroIDSchedulers.mainThread())    .subscribe(new Action1<Long>() {        @OverrIDe        public voID call(Long aLong) {            continuePlayback();        }    });

我在订阅中使用了Action而不是Observer,因为在这种特殊情况下我不相信你需要处理onError.

来自计时器的Observable将在发出它的唯一项目后完成.

请记住,如果您在片段或活动中使用Observable,则应始终确保取消订阅Observables以消除内存泄漏的可能性.

这是Hot and Cold Observables in RxJava的快速链接

总结

以上是内存溢出为你收集整理的android – 为什么我的计时器Observable从未调用过?全部内容,希望文章能够帮你解决android – 为什么我的计时器Observable从未调用过?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1099752.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存