#android #android-savedstate #android-paging-3
Вопрос:
Я использую RemoteMediator в приложении для загрузки данных с ключом страницы. Все работает нормально, за исключением случаев, когда после завершения процесса данные обновляются.
Моя текущая реализация заключается в :
val results = savedStateHandle.getlt;Stringgt;("query").flatMapLatest { query -gt; repository.getPager( query = query, ) }.cachedIn(viewModelScope)
Я знаю о функции initialize() RemoteMediator, но как мне связать ее со смертью процесса?
Ответ №1:
Как вы выяснили, .cachedIn
он просто работает в памяти, поэтому он не переживет смерть процесса. Вы не можете полагаться на внутренний кэш подкачки элементов в памяти для этого, вам необходимо кэшировать загруженные элементы на диске.
Я бы рекомендовал использовать что-то вроде комнаты или какой-то выделенный уровень сохраняемости, который фактически создан для обработки больших списков произвольных классов данных.
Я бы не рекомендовал пытаться сериализовать и сохранить весь список данных в SavedState, так как это может довольно быстро стать непомерно дорогим.
Для вашего другого пункта RemoteMediator
— это просто «тупой» обратный вызов, который не влияет на то, что на самом деле загружает или отображает Пейджинг. Это просто способ для вас написать пользовательскую логику, которая запускается во время граничных условий при подкачке. Вероятно, вам это нужно только в том случае, если вы уже используете многоуровневый подход и пытаетесь пропустить удаленный REFRESH
. Если это ваш случай, RemoteMediator.intiailize
функция гарантированно завершится до того, как начнется загрузка подкачки, что означает, что вы можете проверить, исходите ли вы из сохраненного состояния и есть ли уже кэшированные данные, и если да, вы можете пропустить удаленный REFRESH
возврат InitializeAction.SKIP_INITIAL_REFRESH
.