Проблема с хранением данных sqlite библиотеки подкачки Android

В последние дни я освоился с компонентами архитектуры Android, и меня больше всего интересовала библиотека подкачки для обработки и отображения списков данных из удаленного источника. Для наилучшего UX лучше сначала загрузить данные в базу данных, в этом случае Room, а затем отобразить их в recyclerview, используя pagingLibrary и адаптеры. Меня беспокоит то, что, допустим, у api есть тысячи записей или даже канал Twitter, и все эти данные должны проходить через db, а затем в пользовательский интерфейс, как обрабатывать это хранилище на устройстве? Видеть, как хранить все данные на устройстве - плохая идея. Есть ли способ удалить "устаревшие" данные или как это рекомендуется делать?

Изменить: команда Android работает над V3 для библиотеки подкачки, вот ссылка на статью, которая может пролить здесь более легкую статью

1 ответ

Решение

RemoteMediator имеет initializeAPI, который гарантированно завершится до начала загрузки. Вы можете переопределитьinitialize чтобы проверить устаревание данных, чтобы выполнить любую необходимую настройку (например, удалить старые записи), хотя я лично был бы немного удивлен, если бы только 1000 строк вызывали значительные проблемы с производительностью.

Для путей горячего кода, таких как эти PagingSource запросов, вы можете посмотреть на androidx.benchmark, чтобы выяснить, стоит ли оптимизировать его.

Изменить: вы можете рассмотреть возможность простой очистки таблицы при успешном удаленном обновлении, если вы не хотите, чтобы при обновлении ни один из старых твитов не обновлялся, поскольку это самый простой подход. initializeпредназначен для случая, когда вам нужно выполнить ручную очистку / настройку / проверки устаревания (например, вы можете проверить, сколько лет вашим данным, и решить, хотите ли вы обновлять или нет), но просто очистите при удаленном обновлении перед вставкой новой страницы работает хорошо, потому что вам все равно придется перезапустить разбиение на страницы. Обязательно выполните команду clear + insert в одной и той же транзакции, чтобы не получить два аннулирования из-за обновлений базы данных!