杀死一个 Observable
Posted
技术标签:
【中文标题】杀死一个 Observable【英文标题】:To Kill an Observable 【发布时间】:2020-10-27 05:37:11 【问题描述】:对不起,双关语,不得不这样做。
我有一个这样声明的可观察对象:
Observable
.interval(20, TimeUnit.MILLISECONDS)
.subscribe
val timeDiff = System.currentTimeMillis() - testSum
Log.i("LOG", "TIME DIFF: $timeDiff")
testSum = System.currentTimeMillis()
mVisualizer.getWaveForm(waveformByteArray)
onWaveFormDataCaptureManual(waveformByteArray)
无论我尝试做什么,这个 observable 都不会死。一次性用品.add() (这似乎是 Java 中的答案)给了我一个未解决的参考错误。在此之前,我什至不能将它保存到变量中,因为它也会在屏幕上显示很多红色。
仅供参考,我已经用 Google 搜索过这个问题。没有任何效果。
【问题讨论】:
你用的是 Rxjava 2 还是 3? RxJava 2。但 Manohar 的解决方案正是我想要的。 【参考方案1】:您需要将输出一次性处理掉
import io.reactivex.disposables.Disposable //required import
var diposable:Disposable?=null //global variable
disposable= Observable
.interval(20, TimeUnit.MILLISECONDS)
.subscribe
val timeDiff = System.currentTimeMillis() - testSum
Log.i("LOG", "TIME DIFF: $timeDiff")
testSum = System.currentTimeMillis()
mVisualizer.getWaveForm(waveformByteArray)
onWaveFormDataCaptureManual(waveformByteArray)
处置使用
disposable?.dispose()
如果您有多个一次性用品,那么您可以使用CompositeDisposable
var compositeDisposable:CompositeDisposable= CompositeDisposable()
val disposable= Observable
.interval(20, TimeUnit.MILLISECONDS)
.subscribe
val timeDiff = System.currentTimeMillis() - testSum
Log.i("LOG", "TIME DIFF: $timeDiff")
testSum = System.currentTimeMillis()
mVisualizer.getWaveForm(waveformByteArray)
onWaveFormDataCaptureManual(waveformByteArray)
compositeDisposable.add(disposable)
// you can add as many disposables as you want
丢弃使用
compositeDisposable.dispose() //every thing is disposed
【讨论】:
以上是关于杀死一个 Observable的主要内容,如果未能解决你的问题,请参考以下文章
Android可以在不杀死应用程序的情况下“杀死”一个活动吗?