android - RxJava RxAndroid 一次性赋值
问题描述
调用 onNext/onError 时是否可以重用一次性用品?
我不太明白为什么需要一次性用品,在旧版本的 rxJava 上进行了改装,不需要一次性用品。我还假设当活动或片段被销毁时,一次性用品应该被处置吗?
这是正确的方法吗?
disposable = db.databaseDao().getCategories().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ if (it.isEmpty()) addDefaultCategories() },
{ it.printStackTrace() }
)
对我来说,这部分有点复杂。对于可能对其他人来说很愚蠢的问题,我深表歉意。
解决方案
是的,这种方法非常好。
一次性用品确保您不会留下任何内存泄漏。如果 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()
}
}
推荐阅读
- android - Unity SignReleaseBundle 失败
- python - 目录递归只深入一个目录
- git - Jenkins 为多个 Github 存储库工作
- javascript - 在 vuejs 中测试 firebase 函数
- ssms - 在 Microsoft SQL Server Management Studio 中调试
- python - 如何使用熊猫数据框绘制某些行和列?
- javascript - 如何使用 Javascript 以编程方式更改我当前的输入值
- c++ - 有没有办法将 mp3 文件添加到 C++ 文件中?
- python - Psychopy 中的串口过载
- javascript - 使用 JavaScript 打开另一个弹出窗口时如何关闭一个弹出窗口?