1

所以我在我的班级中有一个一次性声明如下:private var disposable = Disposables.disposed() 我像这样使用它:

 disposable = fileDownloader.download()
                .toFlowable(BackpressureStrategy.LATEST)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({dosomething},
                          {handle error},
                          {onComplete })

基本上它下载一个文件,并且函数下载返回一个 Observable。它工作得很好,我的文件被下载,我处理错误和 onComplet。我的问题是我在库类而不是活动中使用这个函数。所以我不知道如何取消我的一次性用品。当我在课堂上使用一次性用品时,我可以这样做:

override fun onDestroy() {
    super.onDestroy()
    disposable.dispose()
}

它会阻止我的一次性用品。但我不知道如何在活动之外处理它。我试图在我的库中添加一个方法:

fun cancelDownload(){
        println("cancelDownload")
        disposable.dispose()
    }

当我的活动 onDestroyed 被调用时调用它,我打印了“cancelDownload”,但我的一次性用品没有停止。我想要实现的是:当我退出下载活动时,一次性下载被取消。我错过了什么吗?或者我该怎么做?

编辑

正如有人建议我正在使用下载多个文件,所以我有多个一次性文件,这就是我无法处理的原因。所以我加了一个private val disposables = CompositeDisposable()来存放我的一次性用品。所以我做了一次性的 val 并在使用后添加了它:disposables.add(disposable)我将取消功能更改为:

fun cancelDownload(){
        println("cancelDownload")
        disposables.dispose()
    }

问题是它仍然不起作用,当我退出下载活动时,我打印了“cancelDownload”但下载继续。此外,当我清除数据并尝试重新下载后,下载不会开始。看起来我的一次性用品没有再次创建。

编辑2

这似乎disposables.dispose()是一种很难清楚的地方,我们不再能够订阅任何可观察的东西,所以我disposables.clear()改用它,它只是按照我的意愿删除了观察者,所以它起作用了。

4

0 回答 0