【问题标题】:Reusing or recreating an observer?重用或重新创建观察者?
【发布时间】:2019-02-20 09:19:39
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我会将它保存在 ViewModel 中。 当您的片段重新创建时,它将重用以前的视图模型。这将提高性能,因为它不必重新创建您的观察者并调用数据库,它只会使用之前获得的内容。

    请看这里:Android ViewModel

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2020-03-30
      • 1970-01-01
      • 2014-10-28
      • 2019-05-23
      • 2011-06-18
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      相关资源
      最近更新 更多