所以我在我的班级中有一个一次性声明如下: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()
改用它,它只是按照我的意愿删除了观察者,所以它起作用了。