android – 停止Observable.interval并发送onComplete

weixin_38048397 2019-09-12 11:09:30
我有以下几种情况:我希望有一个计时器计数,直到我取消订阅但我希望在我停止使用最后一个值时得到onComplete信号. observable = Observable.interval(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .doOnNext(new Action1<Long>() { @Override public void call(Long aLong) { String duration = Utils.getDuration(startedTrackingTime, new Date().getTime()); view.updateDurationTextView(duration); } }); subscription = observable.subscribe(); public void stopMission() { observable.doOnCompleted(new Action0() { @Override public void call() { Log.d(TAG, "onCompleted: " + "timer"); } }); subscription.unsubscribe(); doOnComplete从未调用过.可以用RxJava做到吗?我觉得我做错了什么?
...全文
1257 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38062043 2019-09-12
  • 打赏
  • 举报
回复
@MatBos是正确的,如果你取消订阅,你不能指望完成排放.但是,如果要提前停止observable并使其完成,则可以将间隔与PublishSubject合并,并在需要时通过主题发送停止消息: PublishSubject<Long> subject = PublishSubject.create(); subject .mergeWith(Observable.interval(1, TimeUnit.SECONDS)) .takeWhile(n -> n != -1) .doOnNext(System.out::println) .doOnCompleted(() -> System.out.println("completed")) .subscribe(); Thread.sleep(3100); subject.onNext(-1L); Thread.sleep(2000); 得到: 0 1 2 completed

479

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧