Paging 라이브러리 개요 Android Jetpack의 구성요소
Paging 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있습니다. 이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 모두 더 효율적으로 사용할 수 있습니다. Paging 라이브러리의 구성요소는 권장 Android 앱 아키텍처에 맞게 설계되었으며 다른 Jetpack 구성요소와 원활하게 통합되고 최고 수준으로 Kotlin을 지원합니다.
페이징 라이브러리를 사용하여 얻을 수 있는 이점
페이징 라이브러리에는 다음과 같은 기능이 있습니다.
- Paging된 데이터의 메모리 내 캐싱. 이렇게 하면 앱이 Paging 데이터로 작업하는 동안 시스템 리소스를 효율적으로 사용할 수 있습니다.
- 요청 중복 삭제 기능이 기본 제공되므로 앱에서 네트워크 대역폭과 시스템 리소스를 효율적으로 사용할 수 있습니다.
- Kotlin 코루틴 및 플로를 위한 최고 수준의 지원 제공
- 새로고침 및 재시도 기능을 포함하여 오류 처리를 기본으로 지원합니다.
설정
페이징 구성요소를 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") }
Groovy
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-common:$paging_version" // Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }
라이브러리 아키텍처
Paging 라이브러리의 구성요소는 앱의 세 가지 레이어에서 작동합니다.
- 저장소 레이어
ViewModel레이어- UI 레이어
이 섹션에서는 각 레이어에서 작동하는 페이징 라이브러리 구성요소와 이 구성요소가 함께 작동하여 페이징된 데이터를 로드하고 표시하는 방법을 설명합니다.
저장소 레이어
저장소 레이어의 기본 페이징 라이브러리 구성요소는 PagingSource입니다. 각 PagingSource 객체는 데이터 소스와 이 소스에서 데이터를 검색하는 방법을 정의합니다. PagingSource 객체는 네트워크 소스 및 로컬 데이터베이스를 포함한 단일 소스에서 데이터를 로드할 수 있습니다.
사용할 수 있는 다른 페이징 라이브러리 구성요소는 RemoteMediator입니다. RemoteMediator 객체는 로컬 데이터베이스 캐시가 있는 네트워크 데이터 소스와 같은 계층화된 데이터 소스의 페이징을 처리합니다.
ViewModel 레이어
Pager 구성요소는 PagingSource 객체 및 PagingConfig 구성 객체를 바탕으로 반응형 스트림에 노출되는 PagingData 인스턴스를 구성하기 위한 공개 API를 제공합니다.
ViewModel 레이어를 UI에 연결하는 구성요소는 PagingData입니다. PagingData 객체는 페이지로 나눈 데이터의 스냅샷을 보유하는 컨테이너입니다. PagingSource 객체를 쿼리하여 결과를 저장합니다.
UI 레이어
기본 Paging UI API는 collectAsLazyPagingItems()입니다. 이 API는 LazyColumn 및 LazyRow와 같은 Compose의 지연 레이아웃 구성요소에서 쉽게 사용할 수 있는 데이터 목록으로 페이지로 나눈 항목을 노출합니다.
어댑터 또는 차이점 로직 없이 UI가 데이터 로드, 업데이트, 오류에 자동으로 반응하도록 하는 Compose 호환 API를 사용하려면 androidx.paging:paging-compose 라이브러리를 추가하세요.
collectAsLazyPagingItems() 확장 함수를 Flow<PagingData>
에서 사용하여 반환된 LazyPagingItems를 LazyColumn의 items()에 전달합니다.
@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으로 이전
- 네트워크 및 데이터베이스의 페이지