在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从未调用过?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)