首页 > 解决方案 > RxJava RxAndroid 一次性赋值

问题描述

调用 onNext/onError 时是否可以重用一次性用品?

我不太明白为什么需要一次性用品,在旧版本的 rxJava 上进行了改装,不需要一次性用品。我还假设当活动或片段被销毁时,一次性用品应该被处置吗?

这是正确的方法吗?

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

对我来说,这部分有点复杂。对于可能对其他人来说很愚蠢的问题,我深表歉意。

标签: androidrx-android

解决方案


是的,这种方法非常好。

一次性用品确保您不会留下任何内存泄漏。如果 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()
    }
}

推荐阅读