杀死一个 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可以彻底杀死一个进程吗

Android可以在不杀死应用程序的情况下“杀死”一个活动吗?

linux杀死进程怎么一下子全部杀死

Python / Celery:杀死父任务时如何杀死子任务?

如何杀死前台服务

如何杀死僵尸进程