重用还是重新创建观察者?

时间:2019-02-20 09:19:40

标签: android kotlin android-room rx-android rx-kotlin

我正在使用自定义存储库来获取房间数据库中数据的可观测值,例如:

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对象。这会导致内存泄漏吗?我应该宁愿尝试重用观察者,而不是处置并重新创建它吗?

1 个答案:

答案 0 :(得分:1)

我会将其保存在ViewModel中。 重新创建片段时,它将重用以前的视图模型。这将提高性能,因为它无需重新创建观察者,也无需重新调用数据库,而仅使用先前获得的内容即可。

参见此处:Android ViewModel