Удаление наблюдаемого внутри источника данных библиотеки подкачки Android

Я хочу наблюдать за изменениями моего сетевого вызова в моем PageKeyedDataSource и удалении подписки RxJava после выхода пользователя из фрагмента, что приводит к разрушению источника данных.

class ProjectDataSource : PageKeyedDataSource<Int, ProjectPresenter>(), KoinComponent {
    ...

    override fun loadInitial(
        params: LoadInitialParams<Int>,
        callback: LoadInitialCallback<Int, ProjectPresenter>
    ) {
        val subscription = mProjectRepository.getProjects(DEFAULT_TAKE, 0)
            .subscribe(
                { projectPresenters ->
                    ...
                },
                { throwable ->
                    ...
                }
            )
          //Where to dispose `subscription`
    }

    ...
}

У меня есть подписка RxJava как в моем репозитории, так и в источнике данных, которые выполняют разные операции с данными. Репозиторий преобразует удаленную модель в модель докладчика и ...

Я не совсем уверен, что наблюдать за данными внутри DataSource - хорошая идея.


person Arrow    schedule 31.05.2020    source источник


Ответы (1)


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

  1. Я не занимаюсь утилизацией в репозитории или источнике данных, если не является действительно крайним случаем.
  2. Если мой репозиторий использует Rx, я просто показываю все свои объекты Rx (Completable, Single и т. Д.) Потребителям (обычно просматривают модели), они подписываются и управляют удалением (во многих случаях очищая их в onCleared)
  3. Если мой источник данных подкачки использует Rx (который, кстати, может вызывать нежелательные эффекты пользовательского интерфейса во время признания недействительности, лучше запускать операции блокировки в источнике данных loadInitial и в аналогичных методах), я перенаправляю экземпляр CompositeDisposable из модели представления через фабрику источника данных .
person ror    schedule 02.06.2020
comment
Спасибо за ваш ответ. Кажется разумным подходом. Я приму твой ответ позже, если не будет ничего лучше. - person Arrow; 02.06.2020