Обзор библиотеки Paging Часть Android Jetpack.
Библиотека Paging помогает загружать и показывать страницы данных из большого набора, хранящегося локально или в сети. Это позволяет приложению более эффективно использовать пропускную способность сети и системные ресурсы. Компоненты библиотеки Paging разработаны с учетом рекомендуемой архитектуры приложений Android, легко интегрируются с другими компонентами Jetpack и поддерживают Kotlin.
Преимущества использования библиотеки Paging
Библиотека Paging включает следующие функции:
- Кэширование в памяти для данных с разбивкой на страницы. Это позволяет приложению эффективно использовать системные ресурсы при работе с данными, разбитыми на страницы.
- Встроенная дедупликация запросов, которая помогает приложению эффективно использовать пропускную способность сети и системные ресурсы.
- Первоклассная поддержка сопрограмм и потоков Kotlin.
- Встроенная поддержка обработки ошибок, включая возможности обновления и повторных попыток.
Настроить
Чтобы импортировать компоненты Paging в приложение для Android, добавьте следующие зависимости в файл build.gradle приложения:
Kotlin
dependencies { val paging_version = "3.4.2" implementation("androidx.paging:paging-common:$paging_version") // Jetpack Compose integration implementation("androidx.paging:paging-compose:$paging_version") }
Яркий
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-common:$paging_version" // Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }
Архитектура библиотеки
Компоненты библиотеки разбиты на три уровня:
- Уровень репозитория
- Слой
ViewModel - Слой интерфейса
В этом разделе описаны компоненты библиотеки Paging, которые работают на каждом уровне, и то, как они взаимодействуют при загрузке и отображении данных с разбивкой на страницы.
Слой репозитория
Основной компонент библиотеки Paging в слое репозитория – PagingSource. Каждый объект PagingSource определяет источник данных и способ их получения из этого источника. Объект PagingSource может загружать данные из любого источника, включая сетевые источники и локальные базы данных.
Ещё один компонент библиотеки Paging, который вы можете использовать, – RemoteMediator. Объект RemoteMediator обрабатывает разбиение на страницы из многоуровневого источника данных, например сетевого источника данных с локальным кешем базы данных.
Слой ViewModel
Компонент Pager предоставляет общедоступный API для создания экземпляров PagingData, которые представлены в реактивных потоках, на основе объекта PagingSource и объекта конфигурации PagingConfig.
Компонент, который соединяет слой ViewModel с интерфейсом, – это PagingData. Объект PagingData – это контейнер для снимка данных с разбивкой на страницы. Он запрашивает объект PagingSource и сохраняет результат.
Слой пользовательского интерфейса
Основной API для интерфейса Paging – collectAsLazyPagingItems(). Он предоставляет постраничные элементы в виде списка данных, которые можно легко использовать в компонентах ленивой разметки Compose, таких как LazyColumn и LazyRow.
Добавьте библиотеку androidx.paging:paging-compose, чтобы использовать совместимые с Compose API, которые позволяют интерфейсу автоматически реагировать на загрузку, обновление и ошибки данных без необходимости использовать адаптеры или логику сравнения. Используйте функцию расширения collectAsLazyPagingItems() для объекта Flow<PagingData>, чтобы передать возвращенное значение LazyPagingItems в функцию items() в объекте LazyColumn.
@Composable fun MessageList(pager: Pager<Int, Message>) { val lazyPagingItems = pager.flow.collectAsLazyPagingItems() LazyColumn { items( lazyPagingItems.itemCount, key = lazyPagingItems.itemKey { it.id } ) { index -> val message = lazyPagingItems[index] if (message != null) { MessageRow(message) } else { MessagePlaceholder() } } } }
Подробнее о больших наборах данных (разбиение на страницы)…
Рекомендуем
- Примечание. Текст ссылки показывается, когда JavaScript отключен.
- Как загрузить и отобразить данные с разбивкой на страницы
- Переход на библиотеку Paging 3
- Страница из сети и базы данных