杀死一个 Observable

To Kill an Observable

请原谅双关语,不得不对他们这样做。

我有一个像这样声明的可观察对象:

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 都不会死。 disposables.add() (这似乎是 Java 中的答案)给我一个未解决的参考错误。在此之前,我什至无法将其保存到变量中,因为它在屏幕上也会显示很多红色。

仅供参考,我用谷歌搜索了这个问题。没有任何效果。

您需要将输出一次性处理掉

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