RxJava RxAndroid 一次性赋值

RxJava RxAndroid Disposable assignation

在调用onNext/onError时重复使用一次性用品可以吗?

我不太明白为什么需要一次性用品,在旧版本的 rxJava 上进行改造不需要一次性用品。我还假设当 activity 或碎片被销毁时,应该丢弃一次性物品?

这是正确的方法吗?

    disposable = db.databaseDao().getCategories().subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { if (it.isEmpty()) addDefaultCategories() },
            { it.printStackTrace() }
        )

对我来说,这部分有点复杂。抱歉这个问题对其他人来说可能很愚蠢。

是的,这种方法非常好。

Disposables 确保您不会留下任何内存泄漏。如果 RX 流未完成并且调用流的 Activity/Fragment/ViewModel 被销毁,您将最终导致内存泄漏。

因为我几乎总是从我的 ViewModel 调用 RX 流,所以我有以下方法让我的生活更轻松:

open class BaseViewModel : ViewModel() {

    private var compositeDisposable = CompositeDisposable()

    fun addDisposable(disposable: Disposable) {
        compositeDisposable.add(disposable)
    }

    @CallSuper
    override fun onCleared() {
        super.onCleared()
        compositeDisposable.clear()
    }
}