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做到吗?我觉得我做错了什么?
...全文
1251 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
内容概要:本文提出了一种基于加权稀疏矩阵恢复与加速交替方向乘子法(ADMM)的单通道盲解混响算法,并提供了完整的Matlab代码实现。该方法旨在从仅有的单路接收信号中有效分离出原始声源信号,克服传统多通道方法对硬件的依赖。核心技术结合了信号在时频域的稀疏性先验,通过构建加权机制以增强稀疏矩阵恢复的准确性,并引入加速ADMM算法来优化求解过程,显著提升了算法的收敛速度与计算效率。该算法特别适用于麦克风阵列受限或无法部署的复杂声学环境,能够有效抑制混响干扰,从而显著提升语音信号的清晰度与后续语音识别系统的性能。; 适合人群:具备扎实的数字信号处理、凸优化理论及稀疏表示基础,从事音频信号处理、语音增强、盲源分离或相关领域研究与开发工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决单麦克风场景下的语音混响去除难题,提升语音通信质量;②应用于智能助听器、车载语音系统、远程视频会议、人机交互等存在严重混响的实际应用场景;③为盲解卷积、稀疏信号恢复等领域的研究提供一种高效的算法实现范例与优化思路。; 阅读建议:建议读者在深入理解信号稀疏性、ADMM优化框架等理论基础上,结合所提供的Matlab代码进行实践,重点分析加权策略的设计原理及其对恢复性能的影响,并通过调整正则化参数、权重因子等关键变量,探究其在不同混响强度和噪声条件下的鲁棒性与泛化能力。

477

社区成员

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

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