重用或重新创建观察者?
Reusing or recreating an observer?
我正在使用自定义存储库来获取房间数据库中数据的可观察值,例如:
fun getUsers(): Observable<List<User>> = userDao.getAll()
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError { Logger.error(tag, "error getting users: ${it.message}") }
.doOnNext { Logger.debug(tag, "fetched ${it.size} users") }
在我的UI(片段)中,我在onResume
开始订阅:
override fun onResume() {
super.onResume()
userObserver = repository.getUsers()
.subscribe {
// handle user
}
}
在 onPause
我有:
override fun onPause() {
super.onPause()
userObserver.dispose()
}
因为每次 repository.getUsers()
被调用,我都在创建一个新的 Observable 对象。这会导致内存泄漏吗?我应该尝试重用观察者而不是处理并重新创建它吗?
我会将其保存在 ViewModel 中。
重新创建片段时,它将重用以前的视图模型。这将提高性能,因为它不必重新创建您的观察者并调用数据库,它只会使用之前获得的内容。
我正在使用自定义存储库来获取房间数据库中数据的可观察值,例如:
fun getUsers(): Observable<List<User>> = userDao.getAll()
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError { Logger.error(tag, "error getting users: ${it.message}") }
.doOnNext { Logger.debug(tag, "fetched ${it.size} users") }
在我的UI(片段)中,我在onResume
开始订阅:
override fun onResume() {
super.onResume()
userObserver = repository.getUsers()
.subscribe {
// handle user
}
}
在 onPause
我有:
override fun onPause() {
super.onPause()
userObserver.dispose()
}
因为每次 repository.getUsers()
被调用,我都在创建一个新的 Observable 对象。这会导致内存泄漏吗?我应该尝试重用观察者而不是处理并重新创建它吗?
我会将其保存在 ViewModel 中。 重新创建片段时,它将重用以前的视图模型。这将提高性能,因为它不必重新创建您的观察者并调用数据库,它只会使用之前获得的内容。