Повторное использование или воссоздание наблюдателя? - PullRequest
0 голосов
/ 20 февраля 2019

Я использую собственный репозиторий для получения наблюдаемых данных в базе данных комнаты, например:

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") }

В моем пользовательском интерфейсе (фрагмент) я запускаю подписку в 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 голосов
/ 20 февраля 2019

Я бы держал это внутри ViewModel.Когда ваш фрагмент будет воссоздан, он будет использовать предыдущую модель представления.Это повысит производительность, так как ему не нужно будет пересоздавать ваш наблюдатель и вызывать базу данных, он будет просто использовать то, что было получено ранее.

См. Здесь: Android ViewModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...