Paging
이 표에는 androidx.paging
그룹의 모든 아티팩트가 나열됩니다.
아티팩트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
paging-* | 3.3.2 | - | - | - |
paging-compose | 3.3.2 | - | - | - |
종속 항목 선언
Paging에 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { def paging_version = "3.3.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.2") }
Kotlin 확장 프로그램 사용에 관한 내용은 ktx 문서를 참고하세요.
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 3.3
버전 3.3.2
2024년 8월 7일
androidx.paging:paging-*:3.3.2
이 출시되었습니다. 버전 3.3.2에 포함된 커밋을 확인하세요.
새로운 기능
paging-common
및paging-testing
가 새로운 Kotlin-멀티플랫폼 타겟watchos
,tvos
,linuxArm64
를 추가했습니다. (90c9768) (53e0eca)
버전 3.3.1
2024년 7월 24일
androidx.paging:paging-*:3.3.1
이 출시되었습니다. 버전 3.3.1에 포함된 커밋을 확인하세요.
버그 수정
- 스크롤 중에 지원 데이터 소스를 새로고침할 때
RecyclerView
와 함께 사용되는PagingDataAdapter
와 같이AsyncPagingDataDiffer
또는 그 위에 빌드된 API가 더 많은 로드를 트리거하지 못하는 문제가 수정되었습니다. 추가했습니다. (I60ca5, b/352586078) PagingDataAdapter
또는AsyncPagingDataDiffer
를 사용하여RecyclerView
를 스크롤하는 동안 지원 데이터 소스에서 항목이 삭제될 때 발생하는 비정상 종료 문제를 수정했습니다. 추가했습니다. (I8c65a, b/347649763)
버전 3.3.0
2024년 5월 14일
androidx.paging:paging-*:3.3.0
이 출시되었습니다. 버전 3.3.0에 포함된 커밋을 확인하세요.
3.2.0 이후 중요 변경사항
- 이제
PagingDataPresenter
가 공개 클래스입니다. 이제 내부 Paging API나paging-runtime
의AsyncPagingDataDiffer
가 없어도PagingDataPresenter
를 기반으로 멀티플랫폼 프레젠터를 빌드할 수 있습니다. LoadStates
가 오류 상태인지, 아니면NotLoading
상태인지 확인하기 위해hasError
및isIdle
에 새로운LoadStates
및CombinedLoadStates
도우미 메서드가 추가되었습니다. 또한 로드가NotLoading
또는 오류 상태로 결정될 때까지 기다리는 새로운awaitNotLoading()
Kotlin 확장 메서드를Flow<CombinedLoadStates>
에 추가했습니다.- 맞춤
LoadStates
가 생성자에 전달되지 않는 한 이제PagingData.empty()
가 기본적으로NotLoading
상태를 전달합니다. 이는PagingDataAdapter
에 제출될 때LoadStates
를 전달하지 않거나LazyPagingItems
로 수집될 때 로드 상태를 전달하는 기존 동작에서 출발합니다.LazyPagingItems
로 수집되면 이제 초기 컴포지션 직후에 빈 목록도 표시됩니다.
Kotlin 멀티플랫폼 호환성
Paging은 이제 CashApp의 multiplatform-paging 프로젝트에서 업스트림된 작업 덕분에 Kotlin 멀티플랫폼과 호환되는 아티팩트를 제공합니다.
paging-common
가 모든 Paging 3 API를common
로 이동했으며 이제 Android 외에도 jvm 및 iOS와 호환됩니다.paging-testing
의 코드가common
로 이동되었으며 이제 Android 외에도 jvm 및 iOS와 호환됩니다.paging-compose
는 코드를common
로 이동하고androidx.compose
의 멀티플랫폼 지원과 일치하는 Android 아티팩트를 제공합니다.paging-runtime
,paging-guava
,paging-rxjava2
,paging-rxjava3
는 Android 전용으로 유지됩니다.
버전 3.3.0-rc01
2024년 5월 1일
androidx.paging:paging-*:3.3.0-rc01
이 Paging 3.3.0-beta01에서 변경사항 없이 출시되었습니다. 버전 3.3.0-rc01에 포함된 커밋을 확인하세요.
버전 3.3.0-beta01
2024년 4월 3일
androidx.paging:paging-*:3.3.0-beta01
이 출시되었습니다. 버전 3.3.0-beta01에 포함된 커밋을 확인하세요.
버전 3.3.0-alpha05
2024년 3월 20일
androidx.paging:paging-*:3.3.0-alpha05
이 출시되었습니다. 버전 3.3.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 Paging이 일반 코드에 AndroidX 주석
@MainThread
주석을 사용합니다. 추가했습니다. (I78f0d, b/327682438)
버전 3.3.0-alpha04
2024년 3월 6일
androidx.paging:paging-*:3.3.0-alpha04
이 출시되었습니다. 버전 3.3.0-alpha04에 포함된 커밋을 확인하세요.
버그 수정
- Kotlin 멀티플랫폼 호환성 추가와 관련된 사소한 문서 오류가 수정되었습니다. (aosp/2950785 참고)
버전 3.3.0-alpha03
2024년 2월 7일
androidx.paging:paging-*:3.3.0-alpha03
이 출시되었습니다. 버전 3.3.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
PagingDataPresenter
가 공개 클래스입니다. 이제 내부 Paging API나paging-runtime
의AsyncPagingDataDiffer
가 없어도PagingDataPresenter
를 기반으로 멀티플랫폼 프레젠터를 빌드할 수 있습니다. 추가했습니다. (Id1f74, b/315214786) LoadStates
가 오류 또는NotLoading
상태인지 확인하는 새로운LoadStates
및CombinedLoadStates
도우미 메서드를 추가했습니다. 또한 로드가NotLoading
또는 오류 상태로 결정될 때까지LoadStateFlow
에서 대기하는 새 API를 추가했습니다. 추가했습니다. (Id6c67)
동작 변경사항
- 맞춤
LoadStates
가 생성자에 전달되지 않는 한 이제PagingData.empty()
가 기본적으로NotLoading
상태를 전달합니다. 이는PagingDataAdapter
에 제출될 때LoadStates
를 전달하지 않거나LazyPagingItems
로 수집될 때 로드 상태를 전달하는 기존 동작에서 출발합니다.LazyPagingItems
로 수집되면 이제 초기 컴포지션 직후에 빈 목록도 표시됩니다. 추가했습니다. (I4d11d, b/301833847)
버전 3.3.0-alpha02
2023년 9월 20일
androidx.paging:paging-*:3.3.0-alpha02
이 출시되었습니다. 버전 3.3.0-alpha02에 포함된 커밋을 확인하세요.
Kotlin 멀티플랫폼 호환성
Paging은 이제 CashApp의 multiplatform-paging 프로젝트에서 업스트림된 작업 덕분에 Kotlin 멀티플랫폼과 호환되는 아티팩트를 제공합니다. 이렇게 하면 두 저장소 간의 불일치를 방지하고 호환성을 유지할 수 있습니다.
paging-common
가 모든 Paging 3 API를common
로 이동했으며 이제 Android 외에도 jvm 및 iOS와 호환됩니다.paging-testing
의 코드가common
로 이동되었으며 이제 Android 외에도 jvm 및 iOS와 호환됩니다.paging-compose
는 코드를common
로 이동하고androidx.compose
의 멀티플랫폼 지원과 일치하는 Android 아티팩트를 제공합니다.paging-runtime
,paging-guava
,paging-rxjava2
,paging-rxjava3
는 Android 전용으로 유지됩니다.
API 변경사항
- 내부 전용인 공개 로거 인터페이스가 지원 중단되었습니다. (I16e95, b/288623117)
외부 기여
버전 3.3.0-alpha01
2023년 9월 20일
- androidx.paging 라이브러리의 첫 번째 멀티플랫폼 출시입니다. 이 버전에는
*-jvm
및*-android
아티팩트만 있습니다. macOS, iOS, linux 변형의 경우3.3.0-alpha02
를 사용합니다.
버전 3.2
버전 3.2.1
2023년 9월 6일
androidx.paging:paging-*:3.2.1
이 출시되었습니다. 버전 3.2.1에 포함된 커밋을 확인하세요.
버그 수정
PagingData.from(List, LoadStates)
오버로드와 달리asSnapshot()
에는 로드가 완료된 시점에 관한 정보가 없으므로PagingData.from(List)
를 사용하여 빌드된 Flow를 전달할 때 Paging 테스트 아티팩트의asSnapshot()
API가 멈추는 문제를 수정했습니다. 이 해결 방법은 완성 가능한 Flow (예:flowOf(PagingData.from(...))
)에서만 작동합니다. 완성 불가능한 Flow (예:MutableStateFlow
에서는LoadStates
를 제공하는PagingData.from
오버로드를 사용합니다. 추가했습니다. (I502c3)- 이제 Paging Compose가 내부적으로
AndroidUiDispatcher.Main
를 사용하여 로드 완료 시 동일한 프레임에서 새 데이터를 사용할 수 있도록 합니다. 추가했습니다. (Ia55af)
버전 3.2.0
2023년 7월 26일
androidx.paging:paging-*:3.2.0
이 출시되었습니다. 버전 3.2.0에 포함된 커밋을 확인하세요.
3.1.0 이후 중요 변경사항
- Paging Compose가 API 안정성에 도달했으며 Paging의 나머지 부분에 다시 병합되었으며 이제 Paging Compose 버전이 다른 모든 Paging 아티팩트와 일치합니다. 3.1.0 이후 변경사항은 다음과 같습니다.
<ph type="x-smartling-placeholder">
- </ph>
PagingData.from(fakeData)
를 만들고 이PagingData
를MutableStateFlow
(예:MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
)에 래핑하여 모조 데이터의 목록을 미리 볼 수 있도록 지원합니다.collectAsLazyPagingItems()
를 미리 볼 수 있도록 이 흐름을@Preview
컴포저블에 수신자로 전달합니다.LazyVerticalGrid
및HorizontalPager
와 같은 모든 지연 레이아웃과 Wear 및 TV 라이브러리의 맞춤 지연 구성요소를 지원합니다. 이는 새로운 하위 수준의LazyPagingItems
확장 메서드인itemKey
및itemContentType
를 통해 구현되었습니다. 이 메서드는 이미LazyColumn
,LazyVerticalGrid
에 있는 표준items
API 및HorizontalPager
와 같은 API의 동등한 API에key
및contentType
매개변수를 구현하는 데 도움이 됩니다.LazyListScope
만 지원하는items(lazyPagingItems)
및itemsIndexed(lazyPagingItems)
가 지원 중단되었습니다.
- 새로운
paging-testing
아티팩트는 앱의 각 레이어의 단위 테스트와 격리된 Paging 통합을 중심으로 설계된 API를 제공합니다. 예를 들어 <ph type="x-smartling-placeholder">- </ph>
TestPager
클래스를 사용하면 페이저 및 실제 UI와는 별개로 자체 맞춤PagingSource
구현 동작을 검증할 수 있습니다.asPagingSourceFactory
API를 사용하여Flow<List<Value>>
또는 정적List<Value>
를 테스트에서 Pager로 전달할 수 있는PagingSourceFactory
로 변환합니다.asSnapshot
Flow<PagingData<Value>>
의 Kotlin 확장 프로그램. 이 확장 프로그램은Flow<PagingData<Value>>
를 직접적인List<Value>
로 변환합니다.asSnapshot lambda
를 사용하면scrollTo
또는appendScrollWhile
와 같은 API를 통해 앱의 UI를 모방할 수 있으므로 페이징된 데이터 세트의 어느 지점에서 데이터 스냅샷이 올바른지 확인할 수 있습니다.
VERBOSE
및DEBUG
의 두 가지 수준에서 Paging 디버깅 정보를 노출하는 기본 로그를 추가했습니다. 로그는adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
명령어를 통해 사용 설정할 수 있습니다. 이는 뷰가 있는 Paging과 Compose를 사용하는 Paging에 모두 적용됩니다.CoroutineDispatcher
대신CoroutineContext
를 허용하는PagingDataAdapter
및AsyncPagingDataDiffer
의 생성자를 추가했습니다.- 이전 ()보다 더 명시적인 API 노출 영역을 제공하는 새로운
PagingSourceFactory
함수 인터페이스가 추가되었습니다. ->PagingSource
람다. 이 팩토리는 페이저를 인스턴스화하는 데 사용할 수 있습니다.
버전 3.2.0-rc01
2023년 6월 21일
androidx.paging:paging-*:3.2.0-rc01
이 출시되었습니다. 버전 3.2.0-rc01에 포함된 커밋을 확인하세요.
외부 기여
버전 3.2.0-beta01
2023년 6월 7일
androidx.paging:paging-*:3.2.0-beta01
이 출시되었습니다. 버전 3.2.0-beta01에 포함된 커밋을 확인하세요.
Paging Compose
- Paging Compose가 공식적으로 API 안정성에 도달했습니다. 따라서 버전은 이제 다른 모든 Paging 아티팩트 버전과 일치하도록
1.0.0-alpha20
에서 업데이트되었습니다.
API 변경사항
- Paging Compose에서 지원 중단된
items(LazyPagingItems)
및itemsIndexed(LazyPagingItems)
API를 삭제했습니다. 대체 API의 예는 Paging Compose1.0.0-alpha20
출시 노트를 참고하세요. 추가했습니다. (I9626e)
버전 3.2.0-alpha06
2023년 5월 24일
androidx.paging:paging-*:3.2.0-alpha06
이 출시되었습니다. 버전 3.2.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
- 기존
() -> PagingSource
람다보다 더 명시적인 API 노출 영역을 제공하는 새로운PagingSourceFactory
함수 인터페이스가 추가되었습니다. 이 팩토리는Pager
를 인스턴스화하는 데 사용할 수 있습니다. 추가했습니다. (I33165, b/280655188) - 변경 불가능한 데이터 목록에서만 로드되는
PagingSourceFactory
를 가져오도록List<Value>.asPagingSourceFactory()
의 새paging-testing
API를 추가했습니다. 여러 세대의 정적 데이터로 테스트하는 데는Flow<List<Value>>
의 기존 확장 프로그램을 계속 사용해야 합니다. 추가했습니다. (Id34d1, b/280655188)
API 변경사항
- 페이징 테스트의 모든 공개 API는 이제 이러한 API가 테스트에서만 사용되도록
@VisibleForTesting
로 주석이 달립니다. 추가했습니다. (I7db6e) asSnapshot
API는 더 이상CoroutineScope
를 전달할 필요가 없습니다. 이제 기본적으로 상위 범위에서 상속된 컨텍스트를 사용합니다. 추가했습니다. (Id0a78, b/282240990)- 실제
Pager
생성자 매개변수의 순서와 직관적으로 일치하도록TestPager
생성자 매개변수의 순서를 변경했습니다. (I6185a) - 페이징 테스트에서 람다 유형
() -> PagingSource<Key, Value>
의 사용을PagingSourceFactory<Key, Value>
유형으로 이전했습니다. 추가했습니다. (I4a950, b/280655188)
동작 변경사항
- 기본 디스패처가 더 이상
asSnapshot
Paging 테스트를 실행하는 데 필요하지 않습니다. 이를 설정하면 더 이상 테스트 동작이 변경되지 않습니다. 추가했습니다. (Ie56ea)
버전 3.2.0-alpha05
2023년 5월 3일
androidx.paging:paging-*:3.2.0-alpha05
이 출시되었습니다. 버전 3.2.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
asSnapshot
의 Paging Testing API가loadOperations
매개변수를 빈 람다로 기본 설정합니다. 이렇게 하면 로드 작업을 전달하지 않고asSnapshot
를 호출하여 초기 새로고침 로드에서 데이터를 검색할 수 있습니다. 추가했습니다. (Ied354, b/277233770)
문서 개선사항
PagingSource
인스턴스를 생성하기 위한 재사용 가능한 팩토리를 반환하는Flow
의 확장 메서드임을 명확히 하기 위해asPagingSourceFactory()
에 관한 문서를 업데이트했습니다. 추가했습니다. (I5ff4f, I705b5)- 점프를 지원하기 위해
itemsBefore
및itemsAfter
를 재정의해야 하는 필요성을 명확히 하기 위해LoadResult.Page
생성자에 관한 문서를 업데이트했습니다. 추가했습니다. (Ied354)
외부 기여
- Paging을 Android/JVM 사양에서 벗어나는 데 도움을 주신 Veyndan님께 감사드립니다. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
버전 3.2.0-alpha04
2023년 2월 8일
androidx.paging:paging-*:3.2.0-alpha04
가 출시되었습니다. 버전 3.2.0-alpha04에 포함된 커밋을 확인하세요.
Paging 테스트
- 이제
paging-testing
아티팩트에는 Pager에 제공될Flow<List<Value>>
에서pagingSourceFactory
를 만드는asPagingSourceFactory
메서드가 포함됩니다. Flow에서 내보낸 각List<Value>>
는 페이징된 데이터 생성을 나타냅니다. 예를 들면, 이를 통해 Pager에서 수집할 데이터 소스를 조작하여PagingData
변환에 관한 페이징 테스트를 용이하게 합니다. (I6f230, b/235528239) Flow<PagingData<T>>
에 포함된 데이터가 올바른지 확인하는 데 적합한 새 API를 사용하여paging-testing
아티팩트를 확장했습니다. 예를 들어, 확장된 아티팩트는 ViewModel 레이어에서Flow<PagingData<T>>
의 출력을 어설션하는 데 사용할 수 있습니다.이는
Flow<PagingData<Value>>
의asSnapshot
Kotlin 확장 프로그램을 통해 이루어지며Flow<PagingData<Value>>
를List<Value>
로 직접 변환합니다.asSnapshot
람다를 사용하면 반복 가능하고 일관된 방식으로scrollTo
또는appendScrollWhile
과 같은 API를 통해 앱의 UI를 모방할 수 있으므로 페이징된 데이터의 어느 지점에서든 데이터의 스냅샷이 올바른 것을 확인할 수 있습니다.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
은runTest
내에서 실행될 것으로 예상되는suspend
메서드입니다. 자세한 내용은 Android에서 Kotlin 코루틴 테스트를 참고하세요. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
API 변경사항
- 이제
AsyncPagingDataDiffer
및PagingDataAdapter
에서getItem
및peek
에 대한 UI 호출이 기본 스레드에서만 호출 가능한 것으로 올바르게 표시됩니다. (I699b6) TestPager
에서 사용하는 일반 유형에서 와일드 카드를 삭제하여 자바 프로그래밍 언어로 작성된 코드에서 이러한 메서드의 결과를 더 쉽게 사용할 수 있습니다. (I56c42)
버전 3.2.0-alpha03
2022년 10월 24일
androidx.paging:paging-*:3.2.0-alpha03
이 출시되었습니다. 버전 3.2.0-alpha03에 포함된 커밋을 확인하세요.
Paging 테스트
이 버전에는 새로운 아티팩트 paging-testing
이 포함되어 있습니다. 이 아티팩트는 앱의 각 레이어를 대상으로 단위 테스트를 진행하고 앱을 개별적으로 Paging과 통합하도록 설계된 API를 제공합니다.
예를 들어 이 첫 번째 버전에는 TestPager
클래스가 포함되어 있으며 이 클래스를 사용하면 엔드 투 엔드 Paging 통합을 시뮬레이션하는 데 일반적으로 필요한 Pager
및 실제 UI와는 별개로 자체 맞춤 PagingSource
구현의 동작을 검증할 수 있습니다.
TestPager
는 fake로 간주되어야 합니다. 이는 PagingSource
를 테스트하기 위한 간소화된 API 노출 영역을 제공하는 동시에 Pager
의 실제 구현을 미러링하는 테스트 더블입니다. 이러한 API는 suspend
API이며 Android에서 Kotlin 코루틴 테스트 가이드에 설명된 대로 runTest
내에서 실행해야 합니다.
이러한 API의 사용 예는 room-paging
테스트에서 확인할 수 있습니다. 이 테스트는 TestPager
를 사용하도록 리팩터링되었습니다.
API 변경사항
LoadResult.Page.iterator()
를 통해LoadResult.Page.data
를 편리하게 반복할 수 있습니다. 이렇게 하면PagingSource.getRefreshKey
메서드에 전달되는PagingState
의pages
속성과 같이List<LoadResult.Page>
가 제공될 때 Kotlin 표준 라이브러리flatten
메서드를 간접적으로 사용할 수 있습니다. (Ie0718)
버전 3.2.0-alpha02
2022년 8월 10일
androidx.paging:paging-*:3.2.0-alpha02
가 출시되었습니다. 버전 3.2.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Paging이
AsyncPagingDataDiffer
또는PagingDataAdapter
클래스를 통해 로그를 제공하여PagingData
에서 수집된 디버깅 정보를 노출합니다. - 로그는
adb shell
명령어adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
을 통해 사용 설정할 수 있습니다. (b/235527159)
버그 수정
- 런타임
paging-runtime:3.1.1
이하에서paging-common:3.2.0-alpha01
을 사용할 때 누락되는PagingDataDiffer
생성자 오류를 수정했습니다. (b/235256201)
버전 3.2.0-alpha01
2022년 6월 1일
androidx.paging:paging-*:3.2.0-alpha01
이 출시되었습니다. 버전 3.2.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
CoroutineDispatcher
대신CoroutineContext
를 허용하는PagingDataAdapter
및AsyncPagingDataDiffer
의 생성자를 추가했습니다. (Idc878)- 기본적으로
PagingData.from()
및PagingData.empty()
가 발표자 측의CombinedLoadStates
에 더 이상 영향을 주지 않습니다. 이러한 생성자에sourceLoadStates
및remoteLoadStates
전달을 허용하는 새로운 오버로드가 추가되어LoadStates
를 완전한 터미널이 되도록 설정하는 기존 동작을 유지하며(즉,NotLoading(endOfPaginationReached = false)
) 필요한 경우 원격 상태도 포함할 수 있는 옵션을 제공합니다.LoadStates
가 전달되지 않으면 이전CombinedLoadStates
는 정적PagingData
를 수신할 때 발표자 측에서 유지됩니다. (Ic3ce5, b/205344028)
버그 수정
- null이 반환되지만 null이 아닌
initialKey
가 설정된 경우 이제PagingSource.getRefreshKey()
의 결과가initialKey
보다 제대로 우선하게 됩니다. (Ic9542, b/230391606)
외부 기여
- test-coroutines-lib 이전으로 인해 :compose:ui:ui-test api(updateApi)가 업데이트되었습니다. (I3366d)
버전 3.1
버전 3.1.1
2022년 3월 9일
androidx.paging:paging-*:3.1.1
이 출시되었습니다. 버전 3.1.1에 포함된 커밋을 확인하세요.
버그 수정
.cachedIn()
에 의해 잘못 삽입된 세대 사이의 중간LoadState.NotLoading
이벤트를 삭제했습니다. 이 변경사항을 통해 새로고침 시 또는 무효화하는 동안 실패한 로드를 재시도하는 사이에 생성된 중복LoadState.NotLoading
이벤트를 삭제하여LoadState
변경사항에 훨씬 더 쉽게 대응할 수 있습니다.
버전 3.1.0
2021년 11월 17일
androidx.paging:paging-*:3.1.0
이 출시되었습니다. 버전 3.1.0에 포함된 커밋을 확인하세요.
3.0.0 이후 중요 변경사항
Flow<PagingData>.observable
및Flow<PagingData>.flowable
API가 더 이상 실험용이 아닙니다.LoadState
의 동작 변경사항:- 이제
endOfPaginationReached
가PagingSource
및RemoteMediator
모두에서LoadType.REFRESH
의 값이 항상false
입니다. - 이제 Paging의
LoadStates
가 다운스트림을 내보내기 전에PagingSource
및RemoteMediator
에서 모두 유효한 값을 기다립니다.PagingData
의 새로운 세대가 일부의 경우NotLoading
으로 잘못 재설정하는 대신 새로고침 상태에서 항상Loading
으로 올바르게 시작합니다. - presenter API의
.loadStateFlow
및.addLoadStateListener
가 미디에이터 상태를 항상null
로 설정하는 초기CombinedLoadStates
를 더 이상 중복 전송하지 않습니다.
- 이제
- 이전 세대에 관한 취소가 이제 무효화/새로운 세대에서 발생합니다.
Flow<PagingData>
에서.collectLatest
를 더 이상 사용할 필요가 없지만 그래도 사용하는 편이 좋습니다. PagingSource.LoadResult.Invalid
가PagingSource.load
에서 새 반환 유형으로 추가되었으며, 이로 인해 Paging은PagingSource
에 관한 대기 중인 로드 요청 또는 향후 로드 요청을 삭제하고 무효화합니다. 이 반환 유형은 데이터베이스나 네트워크에서 반환될 수 있는 잠재적으로 무효하거나 오래된 데이터를 처리하도록 설계되었습니다.- 페이지가 UI에 표시될 때 동기식으로 트리거되는
.onPagesPresented
및.addOnPagesUpdatedListener
presenter API를 추가했습니다. 다음과 같은 경우에 페이지 업데이트가 발생할 수 있습니다.- 표시된 항목에 관한 변경사항이 새로운 PagingData 세대에 있는지와 상관없이 이 새로운 세대가 초기 로드를 완료한 경우. 즉, 목록이 정확하게 동일하기 때문에 새로운 세대가 업데이트 없이 초기 로드를 완료하는 경우에도 이 콜백이 트리거됩니다.
- 삽입된 페이지에 새 항목이 없더라도 페이지가 삽입된 경우 업데이트가 발생합니다.
- 삭제된 페이지가 비어 있더라도 페이지가 삭제된 경우 업데이트가 발생합니다.
버전 3.1.0-rc01
2021년 11월 3일
androidx.paging:paging-*:3.1.0-rc01
이 출시되었습니다. 버전 3.1.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 관찰자가 없는 동안 또는 관찰자가 새 PagingData로 전환하는 사이에 Paging 다운스트림에서 여러 로드 이벤트를 전송한 경우 .cachedIn()에서 발생하는 경합 상태와 메모리 누수가 해결되었습니다. (Ib682e)
버전 3.1.0-beta01
2021년 10월 13일
androidx.paging:paging-*:3.1.0-beta01
이 출시되었습니다. 버전 3.1.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 많은 빠른 항목 액세스가 prefetchDistance의 고려사항에서 삭제되어 페이지 로드가 중단되는 문제를 수정했습니다. 이는 특히 많은 항목이 사용자 스크롤 방향을 대상으로 로드 우선순위를 정하는 순서로 한 번에 배치될 때 문제가 됩니다. 이러한 항목 액세스는 이제 버퍼링되고 동기식으로 우선순위가 정해져 삭제되지 않습니다. (aosp/1833273)
버전 3.1.0-alpha04
2021년 9월 29일
androidx.paging:paging-*:3.1.0-alpha04
가 출시되었습니다. 버전 3.1.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
Flow<PagingData>.observable
및Flow<PagingData>.flowable
API가 더 이상 실험용이 아닙니다. (Ie0bdd)
버그 수정
- LoadStates의 경우
endOfPaginationReached
가 이제LoadType.REFRESH
에 항상false
입니다. 이전에는 endOfPaginationReached가 RemoteMediatorREFRESH
의 경우true
가 될 수 있었지만 PagingSource의 경우에는 true가 될 수 없었습니다. 이제 이 동작은 REFRESH가 종료되는 것이 적절하지 않으므로 항상false
를 반환하도록 통합되고 LoadStates에서 API 계약의 일부로 문서화됩니다. 페이지로 나누기가 종료되었는지 판단할 때는 항상 APPEND 또는 PREPEND 방향과 관련하여 판단해야 합니다. (I047b6) 이제 Paging의 LoadStates가 세대 간 다운스트림을 내보내기 전에 PagingSource와 RemoteMediator에서 모두 유효한 값을 기다립니다. 이렇게 하면 새로운 PagingData 세대가 CombinedLoadStates.source.refresh에서 NotLoading을 전송할 수 없습니다(이미 로드 중인 경우). 새로운 PagingData 세대는 이제 일부의 경우 먼저 NotLoading으로 잘못 재설정하는 대신 새로고침 상태 로드를 항상 올바르게 시작합니다.
이전 세대에 관한 취소가 이제 무효화/새로운 세대에서 발생합니다.
Flow<PagingData>
에서 .collectLatest를 더 이상 사용할 필요는 없지만 그래도 사용하는 편이 좋습니다. (I0b2b5, b/177351336, b/195028524)presenter API의
.loadStateFlow
및.addLoadStateListener
가 항상 미디에이터 상태를null
로, 소스 상태를NotLoading(endOfPaginationReached = false)
으로 설정하는 초기CombinedLoadStates
를 더 이상 중복 전송하지 않습니다. 이 내용의 의미는 다음과 같습니다.- RemoteMediator를 사용하는 경우 미디에이터 상태가 항상 채워집니다.
- 새 loadState 리스너나 새 수집기를
.loadStateFlow
에 등록하면PagingData
에서 실제CombinedLoadStates
를 받지 못한 경우 더 이상 현재 값을 즉시 내보내지 않습니다. 이는PagingData
가 제출되기 전에 수집기나 리스너가 시작되는 경우 발생할 수 있습니다. (I1a748)
버전 3.1.0-alpha03
2021년 7월 21일
androidx.paging:paging-*:3.1.0-alpha03
이 출시되었습니다. 버전 3.1.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
세 번째 LoadResult 반환 유형 LoadResult.Invalid를 PagingSource에 추가합니다. PagingSource.load가 LoadResult.Invalid를 반환하면 페이징이 로드된 데이터를 삭제하고 PagingSource를 무효화합니다. 이 반환 유형은 데이터베이스나 네트워크에서 반환될 수 있는 잠재적으로 무효하거나 오래된 데이터를 처리하도록 설계되었습니다.
예를 들어 기본 데이터베이스를 작성하지만 PagingSource가 제시간에 무효화되지 않는 경우, 구현이 로드하는 지원 데이터 세트의 불변성에 종속되면(예: LIMIT OFFSET 스타일 db 구현) 일관되지 않은 결과가 반환될 수 있습니다. 이 시나리오에서는 로드 후 무효화를 확인하고 LoadResult.Invalid를 반환하는 것이 좋습니다. 이렇게 하면 Paging에서 이 PagingSource에 관한 대기 중인 로드 요청 또는 향후 로드 요청을 삭제하고 무효화합니다.
이 반환 유형은 LivePagedList나 RxPagedList를 활용하는 Paging2 API에서도 지원됩니다. Paging2의 PagedList API와 함께 PagingSource를 사용하면 PagedList가 즉시 분리되어 이 PagedList에서 데이터를 로드하려는 추가 시도를 중지하고 PagingSource에서 무효화를 트리거합니다.
LoadResult는 봉인 클래스입니다. 즉, PagingSource.load 결과를 직접 사용하는 사용 사례에서 컴파일 시간에 LoadResult.Invalid를 처리해야 하는, 소스와 호환되지 않는 변경사항입니다. 예를 들어 exhaustive-when을 활용하여 반환 유형을 확인하는 Kotlin 사용자는 잘못된 유형 확인을 추가해야 합니다. (Id6bd3, b/191806126, b/192013267)
버그 수정
- PagingSource.registerInvalidatedCallback이나 DataSource.addInvalidatedCallback을 통해 추가된 무효화 콜백이 이미 무효화된 PagingSource/DataSource에 등록된 경우 이제 자동으로 트리거됩니다. 이렇게 하면 초기 로드 중에 이미 무효화된 소스가 제공될 때 Paging이 무효화 신호를 삭제하고 중단되는 경합 상태가 해결됩니다. 또한 무효화 콜백이 최대 한 번 호출되는 것이 보장되므로 이제 트리거된 후 올바르게 삭제됩니다. (I27e69)
- 새로 인스턴스화된 PagedList 스트림(예: LivePagedListBuilder 또는 RxPagedListBuilder)에서 자리표시자 초깃값(InitialPagedList)을 제출하면 더 이상 이전에 로드된 데이터가 삭제되지 않습니다.
버전 3.1.0-alpha02
2021년 7월 1일
androidx.paging:paging-*:3.1.0-alpha02
가 출시되었습니다. 버전 3.1.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
표시된 페이지가 UI에서 업데이트되는 즉시 트리거되는 flow presenter API와 onPagesPresent 리스너를 추가했습니다.
이러한 업데이트는 UI와 동기식이므로 업데이트가 적용된 후 .snapshot, .getItemCount 같은 어댑터 메서드를 호출하여 상태를 검사할 수 있습니다. 매 업데이트 시 이 작업을 하기에는 비용이 많이 들 수 있기 때문에 .snapshot()은 명시적으로 호출된 상태로 유지되었습니다.
다음과 같은 경우에 페이지 업데이트가 발생할 수 있습니다.
- 표시된 항목에 관한 변경사항이 새로운 PagingData 세대에 있는지와 상관없이 이 새로운 세대가 초기 로드를 완료한 경우. 즉, 목록이 정확하게 동일하기 때문에 새로운 세대가 업데이트 없이 초기 로드를 완료하는 경우에도 이 콜백이 트리거됩니다.
- 삽입된 페이지에 새 항목이 없음에도 페이지가 삽입된 경우
- 삭제된 페이지가 비어 있음에도 페이지가 삭제된 경우 (I272c9, b/189999634)
버그 수정
- LivePagedList 또는 RxPagedList에서 생성된 초깃값에서 PagedList.dataSource에 액세스할 때 더 이상 IllegalStateException이 잘못 발생하지 않습니다. (I96707)
버전 3.1.0-alpha01
2021년 6월 2일
androidx.paging:paging-*:3.1.0-alpha01
이 출시되었습니다. 버전 3.1.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
paging-rxjava3
에서 제공하는 클래스가androidx.paging.rxjava3
패키지 아래에 위치하여paging-rxjava2
와 충돌하지 않습니다. (Ifa7f6)
버그 수정
- Paging이 가끔 노옵스(no-ops) differ 이벤트를 RecyclerView로 보내 특정 리스너의 조기 트리거를 야기했던 문제를 해결했습니다. (Ic507f, b/182510751)
외부 기여
- 지원 중단된 PagedList compat API를 rxjava3 아티팩트에 추가했습니다. (Id1ce2, b/182497591)
Paging Compose 버전 1.0.0
버전 1.0.0-alpha20
2023년 5월 24일
androidx.paging:paging-compose:1.0.0-alpha20
이 출시되었습니다. 버전 1.0.0-alpha20에 포함된 커밋을 확인하세요.
새로운 기능
- Paging Compose는 이제
PagingData.from(fakeData)
를 만들고 이PagingData
를MutableStateFlow
에 래핑하여 모조 데이터 목록 미리보기를 지원합니다 (예:MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
)을 입력합니다. 이 데이터를@Preview
에 대한 입력으로 사용하면collectAsLazyPagingItems()
를 호출하면 미리 볼 수 있는LazyPagingItems
가 제공됩니다. 추가했습니다. (I8a78d, b/194544557)
버그 수정
- 이제
LazyPagingItems
에서 수집된pager.flow.cachedIn
에서 캐시된 데이터를 비동기 수집 없이 상태 복원 후 즉시 사용할 수 있습니다. 즉, 상태가 복원된 후 초기 컴포지션 즉시 캐시된 데이터를 표시할 준비가 됩니다. 추가했습니다. (I97a60, b/177245496)
버전 1.0.0-alpha19
2023년 5월 3일
androidx.paging:paging-compose:1.0.0-alpha19
이 출시되었습니다. 버전 1.0.0-alpha19에 포함된 커밋을 확인하세요.
모든 지연 레이아웃 지원
이전에는 Paging Compose가 LazyListScope
에서 맞춤 items
및 itemsIndexed
확장 프로그램을 제공했습니다. 즉, Wear 및 TV 라이브러리에서 제공하는 LazyVerticalGrid
, HorizontalPager
또는 기타 맞춤 지연 구성요소와 같은 다른 지연 레이아웃과 함께 Paging Compose를 사용할 수 없었습니다. 이러한 비유연성을 해결하는 것이 이번 출시의 기본 업데이트입니다.
더 많은 지연 레이아웃을 지원하려면 다른 레이어에 API를 빌드해야 했습니다. 이제 Paging Compose는 각 지연 레이아웃의 맞춤 items
API를 제공하는 대신 itemKey
및 itemContentType
의 LazyPagingItems
에서 약간 낮은 수준의 확장 메서드를 제공합니다. 이러한 API는 LazyColumn
, LazyVerticalGrid
및 HorizontalPager
와 같은 API의 동등한 API에 이미 존재하는 표준 items
API에 key
및 contentType
매개변수를 구현하도록 돕는 데 중점을 둡니다. 추가했습니다. (Ifa13b, Ib04f0, b/259385813)
즉, LazyVerticalGrid
지원은 다음과 같습니다.
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
새로운 API를 사용하는 예를 더 보려면 샘플을 참고하세요.
이러한 변경으로 인해 LazyColumn
및 LazyRow
예가 몇 줄 더 길어지지만, 앞으로 Paging Compose를 사용하는 사용자에게 모든 지연 레이아웃 전반에 걸친 일관성이 중요한 요소라고 느꼈습니다. 따라서 LazyListScope
의 기존 확장 프로그램이 이제 지원 중단됩니다. 추가했습니다. (I0c459, I92c8f, b/276989796)
API 변경사항
- 새 API로 쉽게 이전할 수 있도록
LazyListScope
의items
및itemsIndexed
확장 함수가 이제 새 API의 지원을 미러링하는contentType
매개변수를 지원합니다. 추가했습니다. (Ib1918, b/255283378)
종속 항목 업데이트
- Paging Compose는 Compose 1.0.5에서 Compose 1.2.1로 종속 항목을 업데이트했습니다. 추가했습니다. (Ib1918, b/255283378)
버전 1.0.0-alpha18
2023년 2월 8일
androidx.paging:paging-compose:1.0.0-alpha18
은 변경사항 없이 출시되었습니다. 버전 1.0.0-alpha18에 포함된 커밋을 확인하세요.
버전 1.0.0-alpha17
2022년 10월 24일
androidx.paging:paging-compose:1.0.0-alpha17
이 출시되었습니다. 버전 1.0.0-alpha17에 포함된 커밋을 확인하세요.
새로운 기능
collectLazyPagingItems
를 호출할 때 맞춤CoroutineContext
지원을 추가합니다. (I7a574, b/243182795, b/233783862)
버전 1.0.0-alpha16
2022년 8월 10일
androidx.paging:paging-compose:1.0.0-alpha16
이 출시되었습니다. 버전 1.0.0-alpha16에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Paging이
LazyPagingItems
클래스를 통해 로그를 제공하여 PagingData에서 수집된 디버깅 정보를 노출합니다. - 로그는
adb shell
명령어adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
을 통해 사용 설정할 수 있습니다([b/235527159}(https://issuetracker.google.com/issues/235527159)).
버그 수정
paging-common:3.1.1
이하에서paging-compose:1.0.0-alpha15
를 사용할 때 누락되는PagingDataDiffer
생성자 오류를 수정했습니다(b/235256201,b/239868768).
버전 1.0.0-alpha15
2022년 6월 1일
androidx.paging:paging-compose:1.0.0-alpha15
가 출시되었습니다. 버전 1.0.0-alpha15에 포함된 커밋을 확인하세요.
API 변경사항
CoroutineDispatcher
대신CoroutineContext
를 허용하는PagingDataAdapter
및AsyncPagingDataDiffer
의 생성자를 추가했습니다. (Idc878)
버그 수정
- 이제
LazyPagingItems
가 초기loadState
를LoadState.Loading
새로고침을 갖도록 설정합니다. (I55043, b/224855902)
버전 1.0.0-alpha14
2021년 10월 13일
androidx.paging:paging-compose:1.0.0-alpha14
가 출시되었습니다. 버전 1.0.0-alpha14에 포함된 커밋을 확인하세요.
버전 1.0.0-alpha13
2021년 9월 29일
androidx.paging:paging-compose:1.0.0-alpha13
이 출시되었습니다. 버전 1.0.0-alpha13에 포함된 커밋을 확인하세요.
API 변경사항
LazyPagingItems.snapshot()
함수를LazyPagingItems.itemSnapshotList
속성으로 대체했습니다. (Ie2da8)- 지원 중단된
LazyPagingItems.getAsState()
를 삭제했습니다. (Ie65e4)
버전 1.0.0-alpha12
2021년 7월 21일
androidx.paging:paging-compose:1.0.0-alpha12
가 출시되었습니다. 버전 1.0.0-alpha12에 포함된 커밋을 확인하세요.
API 변경사항
- Paging을
LazyColumn/Row
와 연결하는 데 사용된items(lazyPagingItems)
와itemsIndexed(lazyPagingItems)
가 이제 항목을 나타내는 안정적인 키를 지정할 수 있는 옵션 키 매개변수를 허용합니다. 키에 관한 자세한 내용은 여기를 참고하세요. (I7986d) lazyPagingItems.getAsState(index)
함수가 이제 지원 중단됩니다. 대신lazyPagingItems[index]
를 사용합니다. (I086cb, b/187339372)
버전 1.0.0-alpha11
2021년 6월 30일
androidx.paging:paging-compose:1.0.0-alpha11
이 출시되었습니다. 버전 1.0.0-alpha11에 포함된 커밋을 확인하세요.
버전 1.0.0-alpha10
2021년 6월 2일
androidx.paging:paging-compose:1.0.0-alpha10
이 출시되었습니다. 버전 1.0.0-alpha10에 포함된 커밋을 확인하세요.
버전 1.0.0-alpha09
2021년 5월 18일
androidx.paging:paging-compose:1.0.0-alpha09
가 출시되었습니다. 버전 1.0.0-alpha09에 포함된 커밋을 확인하세요.
버그 수정
- 이제 LazyPagingItems의 itemCount와 item getter를 관측할 수 있으므로 LazyPagingItems를 LazyVerticalGrid에도 사용할 수 있습니다. (Ie2446, b/171872064, b/168285687)
Compose 호환성
androidx.paging:paging-compose:1.0.0-alpha09
는 Compose 버전1.0.0-beta07
이상과만 호환됩니다.
버전 1.0.0-alpha08
2021년 2월 24일
androidx.paging:paging-compose:1.0.0-alpha08
이 출시되었습니다. 버전 1.0.0-alpha08에 포함된 커밋을 확인하세요.
Compose 1.0.0-beta01과 통합되도록 업데이트되었습니다.
버전 1.0.0-alpha07
2021년 2월 10일
androidx.paging:paging-compose:1.0.0-alpha07
이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
Compose alpha12와 통합되도록 업데이트되었습니다.
버전 1.0.0-alpha06
2021년 1월 28일
androidx.paging:paging-compose:1.0.0-alpha06
이 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.
버그 수정
Compose 1.0.0-alpha11에 따라 업데이트되었습니다.
버전 1.0.0-alpha05
2021년 1월 13일
androidx.paging:paging-compose:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
Compose 1.0.0-alpha10에 종속되도록 업데이트되었습니다.
버전 1.0.0-alpha04
2020년 12월 16일
androidx.paging:paging-compose:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
버그 수정
- 미디에이터 및 소스 로드 상태가 모두
NotLoading
이 된 이후에만 편의성 속성CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
가Loading
에서NotLoading
으로 전환되어 원격 업데이트가 적용될 수 있도록 업데이트되었습니다. (I65619)
버전 1.0.0-alpha03
2020년 12월 2일
androidx.paging:paging-compose:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
- Compose 1.0.0-alpha08과 일치하도록 업데이트되었습니다.
버전 1.0.0-alpha02
2020년 11월 11일
androidx.paging:paging-compose:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
AsyncPagingDataDiffer
/PagingDataAdapter
에서 사용할 수 있는 동일한 기능을 노출하는LazyPagingItem
에.peek()
,.snapshot()
,.retry()
,.refresh()
메서드를 추가했습니다. (Iddfe8, b/172041660)
버전 1.0.0-alpha01
2020년 10월 28일
androidx.paging:paging-compose:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
paging-compose
아티팩트는 Paging 라이브러리와 Jetpack Compose를 통합합니다. 간단한 사용 예시는 다음과 같습니다.
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
버전 3.0.1
버전 3.0.1
2021년 7월 21일
androidx.paging:paging-*:3.0.1
이 출시되었습니다. 버전 3.0.1에 포함된 커밋을 확인하세요.
버그 수정
LivePagedList
나RxPagedList
로 생성된 초깃값에서PagedList.dataSource
에 액세스할 때 더 이상 IllegalStateException이 잘못 발생하지 않습니다. (I96707)
버전 3.0.0
버전 3.0.0
2021년 5월 5일
androidx.paging:paging-*:3.0.0
이 출시되었습니다. 버전 3.0.0에 포함된 커밋을 확인하세요.
3.0.0의 주요 기능
Paging 2.x.x의 기존 API 대부분을 지원 중단하고 새 Paging 3 API로 대체하여 다음과 같이 개선했습니다.
- Kotlin 코루틴 및 Flow를 위한 최고 수준의 지원 제공
- 취소 지원
- 내장 로드 상태 및 오류 신호
- 재시도 및 새로고침 기능
- DataSource 서브클래스 세 개를 모두 통합 PagingSource 클래스로 결합
- 구분자를 추가하기 위한 기본 제공 변환이 포함된 맞춤 페이지 변환
- 상태 헤더 및 바닥글 로드
버전 3.0.0-rc01
2021년 4월 21일
androidx.paging:paging-*:3.0.0-rc01
이 출시되었습니다. 버전 3.0.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- Paging이 가끔 노옵스(no-ops) differ 이벤트를 RecyclerView로 보내 특정 리스너의 조기 트리거를 야기했던 문제를 해결했습니다. (Ic507f, b/182510751)
버전 3.0.0-beta03
2021년 3월 24일
androidx.paging:paging-*:3.0.0-beta03
이 출시되었습니다. 버전 3.0.0-beta03에 포함된 커밋을 확인하세요.
버그 수정
- RecyclerView에서 예기치 않은 점프를 방지하기 위해 목록이 새로고침될 때 자리표시자가 처리되는 방식이 개선되었습니다. 자세한 내용은 NullPaddedDiffing.md를 참고하세요. (If1490, b/170027529, b/177338149)
.build()
가 호출될 때 다양한 PagedList 빌더(이전 호환성 경로)가 더 이상 기본 스레드에서 동기식으로DataSource.Factory.create()
를 잘못 호출하지 않습니다. (b/182798948)
버전 3.0.0-beta02
2021년 3월 10일
androidx.paging:paging-*:3.0.0-beta02
가 출시되었습니다. 버전 3.0.0-beta02에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 Rx3 확장이
@ExperimentalCoroutinesApi
선택 요구사항을 올바르게 전파합니다. 이전에는@get
메서드에 표시되었으며, 이 메서드는 https://youtrack.jetbrains.com/issue/KT-45227에 설명된 문제로 인해 Kotlin 컴파일러에서 무시합니다. (I5733c)
버그 수정
- 실험용 API의 공개 사용에 제한을 적용합니다. (I6aa29, b/174531520)
- 원격 새로고침을 호출할 때
PagingState
가 항상null
이 되는 버그를 수정했습니다. - PagingSource가 반환하는 빈 페이지에서 Paging '중단'을 일으키는
prefetchDistance
를 처리하고자 다시 Paging을 가져오는 작업을 차단할 수 있는 버그를 수정했습니다.
버전 3.0.0-beta01
2021년 2월 10일
androidx.paging:paging-*:3.0.0-beta01
이 출시되었습니다. 버전 3.0.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 Rx2 및 Rx3 래퍼가 종속 대상의 실험용 주석을 노출합니다. paging-rxjava2 또는 paging-rxjava3에서 Rx compat 래퍼를 사용하는 경우 이제
@OptIn(ExperimentalCoroutinesApi::class)
으로 사용에 관해 주석을 달아야 합니다. (Ib1f9d)
버그 수정
- 호환성 경로를 통해 v2
DataSource
API를 사용할 때 가끔 발생하는IndexOutOfBoundsException: Inconsistency detected
문제를 해결했습니다. DataSource
초기화 중에isInvalid
호출이 호환성 경로를 통해 사용될 때 이제 기본 스레드가 아닌 fetchDispatcher에서 올바르게 실행됩니다. 이는 Room의PagingSource
구현을 사용할 때 기본 스레드의 Db 액세스로 인해 발생하는IllegalStateException
문제를 해결합니다.
버전 3.0.0-alpha13
2021년 1월 27일
androidx.paging:paging-*:3.0.0-alpha13
이 출시되었습니다. 버전 3.0.0-alpha13에 포함된 커밋을 확인하세요.
API 변경사항
PagingSource.getRefreshKey
는 더 이상 구현 가능한 옵션이 아닙니다. 이제 이 함수는 기본 구현이 없는 추상 함수입니다. 사용자를 이전하면 간단히null
을 반환하여 이전 구현을 계속 반환할 수 있지만, 가능한 경우 Paging이PagingState.anchorPosition
을 통해 표시 영역을 중심으로 계속 로드할 수 있도록 사용자의 현재 스크롤 위치에 기반한 키를 반환하는 실제 구현이getRefreshKey()
에 있어야 합니다. (I4339a)InvalidatingPagingSourceFactory
는 이제 최종 클래스입니다. (Ia3b0a)- 추가 옵션으로 SeparatorType 매개변수를 사용하여 터미널 구분자(헤더/바닥글) 동작을 구성할 수 있습니다. 다음과 같은 두 가지 옵션이 있습니다.
FULLY_COMPLETE
- 기존 동작. 터미널 구분자를 추가하기 전에 endOfPaginationReached를 표시하도록 PagingSource와 RemoteMediator를 모두 기다립니다. RemoteMediator가 사용되지 않는다면 원격 loadState는 무시됩니다. 이는 주로 원격 소스(예: 네트워크)에서 가져오기를 비롯하여 섹션이 완전히 로드될 때만 섹션 구분자를 표시하려는 경우에 유용합니다.SOURCE_COMPLETE
- RemoteMediator가 사용되더라도 endOfPaginationReached를 표시하도록 PagingSource만 기다립니다. 이렇게 하면 헤더와 바닥글이 초기 로드와 동기화되어 표시되므로 사용자가 터미널 구분자를 보기 위해 스크롤할 필요가 없습니다. (Ibe993, b/174700218)
버그 수정
- PageFetcher가 PagingSource에서 로드를 시작하기도 전에 PagingSource가 무효가 되는 경우 드물게 발생하던 메모리 누수를 수정했습니다. (I9606b, b/174625633)
버전 3.0.0-alpha12
2021년 1월 13일
androidx.paging:paging-*:3.0.0-alpha12
가 출시되었습니다. 버전 3.0.0-alpha12에 포함된 커밋을 확인하세요.
API 변경사항
- InvalidatingPagingSourceFactory는 추상 메서드를 보유하지 않으므로 더 이상 추상 클래스가 아닙니다. (I4a8c4)
- 자바 사용자를 위해 Lifecycle 또는 CoroutineScope 대신 ViewModel을 허용하는 .cachedIn()의 오버로드를 추가했습니다. (I97d81, b/175332619)
- Executor를 변환 연산자 인수로 사용하는 것을 허용하여 자바 호출자에서 비동기 방식으로 PagingData 변환 작업을 사용할 수 있습니다. 모든 -Sync 변환 연산자는 이제 -Sync 접미사가 삭제되었으며 Kotlin 코루틴 사용자는 대신 정지 블록을 허용하는 확장 함수를 호출하여 명확하게 구분해야 합니다.
모든 PagingData 변환 연산자는 정적 PagingDataTransforms 클래스 아래의 확장 함수로 이동했습니다. 자바 사용자는 정적 도우미 메서드를 통해 연산자를 호출해야 합니다(예:
PagingDataTransforms.map(pagingData, transform)
). Kotlin 사용자의 경우 구문은 동일하지만, 함수를 가져와야 합니다. (If6885, b/172895919)
버그 수정
- 페이지로 나누기 끝에 이미 도달한 경우
adapter.refresh()
중에RemoteMediator.load()
가 호출되지 않는 버그를 수정했습니다.
버전 3.0.0-alpha11
2020년 12월 16일
androidx.paging:paging-*:3.0.0-alpha11
이 출시되었습니다. 버전 3.0.0-alpha11에 포함된 커밋을 확인하세요.
새로운 기능
- 다음 기본 사용 사례를 위한 저장된 상태 지원이 추가되었습니다. 완전한 지원(특히 계층화된 소스 사례에서의 지원)은 아직 준비 중입니다.
- 흐름이 캐시되고 애플리케이션이 중단되지 않습니다(예: 흐름이 보기 모델에 캐시되고 활동이 프로세스 내에서 다시 생성됨).
- 페이징 소스가 집계되고 자리표시자가 사용 설정되며 레이아웃에 시차가 발생하지 않습니다.
API 변경사항
PagingSource.getRefreshKey()
는 이제 안정적인 API입니다. (I22f6f, b/173530980)PagingSource.invalidate
는 더 이상 공개 함수가 아닙니다. 무효화가 발생할 때 알림을 받아야 하는 경우 무효화를 재정의하는 대신 registerInvalidatedCallback 메서드를 호출하는 것을 고려하세요. (I628d9, b/173029013, b/137971356)- 이제 Pager는 일반 생성자와 함께 하나의 실험 생성자를 보유하며 선택 주석을 통해 실험용 API를 비실험용 공개 API에 유출하지 않습니다. (I9dc61, b/174531520)
- 미디에이터 및 소스 로드 상태가 모두
NotLoading
이 된 이후에만 편의성 속성CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
가Loading
에서NotLoading
으로 전환되어 원격 업데이트가 적용될 수 있도록 업데이트되었습니다. (I65619) LoadParams.pageSize가 삭제되었습니다(이미 지원 중단됨). PagingSource에
LoadParams.loadSize
를 사용하는 것이 좋습니다.LoadParams.loadSize
는 항상PagingConfig.pageSize
와 같습니다. 단, 초기 로드 호출은 예외이며PagingConfig.initialLoadSize
와 같습니다.Pager 또는 PagedList를 사용하지 않고 Paging2 DataSource를 테스트하며
initialLoadSize
를 설정하는 경우pageSize
가PagingConfig.pageSize
와 일치하지 않을 수 있습니다. 테스트에서 이 부분이 중요하다면 DataSource 로드 메서드에 내부적으로 올바른 PageSize가 설정되도록 Pager/PagedList를 사용해 보세요. (I98ac7, b/149157296)
버그 수정
- PagingConfig.maxSize가 설정된 구분자를 사용할 때 IllegalStateException으로 인해 발생하는 비정상 종료 문제를 수정했습니다. (I0ed33, b/174787528)
- RemoteMediator가 설정된 경우 PREPEND/APPEND의 로드 상태가 초기 로드 직후에
NotLoading(endOfPaginationReached = true)
으로 업데이트되지 않는 버그를 수정했습니다. (I8cf5a) - .snapshot(), .peek() 등의 프레젠터 측 API가 ListUpdateCallback 업데이트 내의 이전(오래된) 목록을 반환하는 버그를 수정했습니다.
- Separator 연산자가 RemoteMediator와 함께 사용될 때 머리글 또는 바닥글이 추가되지 않는 버그를 수정했습니다.
- RemoteMediator에서 NotLoading으로 LoadState를 업데이트하는 중 Loading 상태에서 멈추는 버그를 수정했습니다.
- Paging2.0 호환성 API인
.asPagingSourceFactory()
에서DataSource
가 잘못된 CoroutineDispatcher에서 초기화되도록 하는 버그를 수정했습니다. 특히 이 호환성 경로를 사용하는 Room의 현재 PagingSource 구현을 사용하는 경우 이 방법으로 비정상 종료 및 발생 가능한 ANR 사례가 해결됩니다.
버전 3.0.0-alpha10
2020년 12월 2일
androidx.paging:paging-*:3.0.0-alpha10
이 출시되었습니다. 버전 3.0.0-alpha10에 포함된 커밋을 확인하세요.
API 변경사항
지원 중단된
dataRefreshFlow
및dataRefreshListener
API가 loadStateFlow/Listener 업데이트와 중복되어 삭제되었습니다. 이러한 마이그레이션에서는 다음이 loadStateFlow에 해당합니다.loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
버그 수정
- RemoteMediator
REFRESH
의 endOfPaginationReached가 이제 LoadState 업데이트로 올바르게 전파되고 원격APPEND
및PREPEND
가 트리거되지 않도록 합니다. (I94a3f, b/155290248) - 빈 초기 페이지 또는 대량 필터링으로 인해 빈 목록을 표시해도 이제 Paging에서
PREPEND
또는APPEND
로드를 시작합니다. (I3e702, b/168169730) - 무효화가 빠르게 발생할 때 PagingSource의 후속 세대에서
getRefreshKey
가 호출되지 않는 문제를 수정했습니다. (I45460, b/170027530)
외부 기여
- 보내는 모든 PagingSources에 무효화를 전달하는
.invalidate()
API와 함께 새로운 추상적 클래스 InvalidatingPagingSourceFactory가 추가되었습니다. @claraf3님, 감사합니다. (Ie71fc, b/160716447)
알려진 문제
- RemoteMediator를 사용하는 경우 .insertSeparators() 변환에서 머리글과 바닥글이 즉시 표시되지 않을 수 있습니다. (b/172254056)
- RemoteMediator를 사용하면
RemoteMediator.load()
가 반환되기 전에 무효화 및PagingSource.load(LoadParams.Refresh(...))
가 완료되는 경우 원격LoadState
가 멈출 수 있습니다. (b/173717820)
버전 3.0.0-alpha09
2020년 11월 11일
androidx.paging:paging-*:3.0.0-alpha09
가 출시되었습니다. 버전 3.0.0-alpha09에 포함된 커밋을 확인하세요.
API 변경사항
- replaceWith 절을 사용하는 dataRefreshFlow/리스너 메서드를 완전히 지원 중단했습니다. (I6e2dd)
버그 수정
- RemoteMediator와 함께 구분자를 사용할 때
IllegalArgumentException
이 발생하고 endOfPagination을 반환하는 원격 로드가 계속 실행되는 동안 무효화가 트리거되는 문제를 수정했습니다. (I3a260)
버전 3.0.0-alpha08
2020년 10월 28일
androidx.paging:paging-*:3.0.0-alpha08
이 출시되었습니다. 버전 3.0.0-alpha08에 포함된 커밋을 확인하세요.
API 변경사항
DataSource.InvalidatedCallback
의 Kotlin/자바 변이는 기능 인터페이스를 통해 Kotlin에서 SAM 변환을 사용 설정하여 결합되었습니다(Kotlin 1.4에서 사용 가능). 이는.map
또는.mapByPage
로 변환한 후 무효화 콜백의 kotlin 변이가 호출되지 않았던 버그를 수정했습니다. (I1f244, b/165313046)
버그 수정
- ViewPager와의 Paging 상호작용이 크게 개선되었습니다. 특히 Paging은 페이지 무효화로 인해 더 이상
RemoteMediator#load
호출을 취소하지 않습니다. 또한 REFRESH가 필요한 경우 REFRESH 요청이 완료될 때까지 append/prepend 로드 요청이 더 이상 발생하지 않습니다. (I6390b, b/162252536) - MissingGetterMatchingBuilder의 API 린트 검사가 androidx용으로 사용 설정되었습니다. (I4bbea, b/138602561)
- 백그라운드 스레드에서 RecyclerView에 알림으로써
.withLoadState*
ConcatAdapter
도우미가 다운되는 버그를 수정했습니다. (I18bb5, b/170988309) - 비어 있지 않은 매우 작은 페이지를 로드할 때 프리패치가 제대로 로드되지 않는 버그를 수정했습니다. (Iffda3 b/169259468)
버전 3.0.0-alpha07
2020년 10월 1일
androidx.paging:paging-*:3.0.0-alpha07
이 출시되었습니다. 버전 3.0.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
- 비동기 PagingData Guava 기반 연산자는 이제 실행 컨텍스트를 제어할 때 Executor를 매개변수로 허용합니다. (Id4372)
버그 수정
- 경합 상태로 인해 RemoteMediator에서 발생하는 IndexOutOfBounds 예외가 수정되었습니다. (I00b7f, b/165821814)
- DataSource에서 PagingSource로의 변환에서 결과로 생성된 PagingSource가 DataSource의 무효화 신호를 무시할 수 있는 경합 상태가 수정되었습니다.
- 페이지 가져오기 로직에서 PagingDataAdapter.refresh()가 호출될 때까지 새로 생성된 PagingSource 버전을 얻지 못하는 문제가 해결되었습니다.
- PagingSource(예: Room으로 생성된 것)로 변환된 DataSource를 RemoteMediator와 함께 사용할 때 가끔 스크롤 위치가 손실되던 문제가 해결되었습니다.
외부 기여
- PagingData용으로 RxJava2, RxJava3 및 Guava 기반의 비동기 변환 연산자를 추가해 주신 @simonschiller님께 감사드립니다.
버전 3.0.0-alpha06
2020년 9월 2일
androidx.paging:paging-*:3.0.0-alpha06
이 출시되었습니다. 버전 3.0.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
- 안정적인 ID 지원 부족에 관한 더 명확한 메시지를 제공하는
UnsupportedOperationException
이 이제PagingDataAdapter.setHasStableIds
가 호출될 때마다 발생합니다. (Ib3890, b/158801427)
버그 수정
- insertSeparator가 더 이상 빈 페이지를 필터링하지 않으므로 빈 페이지가 많이 삽입된 경우에도 프리젠터가 미리 가져오기 범위를 준수할 수 있습니다. (I9cff6, b/162538908)
버전 3.0.0-alpha05
2020년 8월 19일
androidx.paging:paging-*:3.0.0-alpha05
가 출시되었습니다. 버전 3.0.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Paging은 제시된 데이터가 매우 많이 필터링된 경우에도 페이지를 올바르게 미리 가져옵니다.
- 재시도된 로드에
LoadResult.Error
를 반환하면 항목 액세스가 재시도를 다시 잘못 트리거하는 경우가 더 이상 없습니다.
외부 기여
- 일부 테스트를 정리하는 데 도움을 주신 클라라 에프님께 감사드립니다. (549612)
버전 3.0.0-alpha04
2020년 8월 5일
androidx.paging:paging-*:3.0.0-alpha04
가 출시되었습니다. 버전 3.0.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 페이지 로드를 트리거하지 않고 제시된 데이터 액세스를 허용하도록
AsyncPagingDataDiffer
및PagingDataAdapter
에peek()
API를 추가했습니다. (I38898, b/159104197) - 페이지 가져오기를 트리거하지 않고 제시된 항목을 검색할 수 있도록
PagingDataAdapter
및AsyncPagingDataDiffer
에snapshot()
API를 추가했습니다. (I566b6, b/159104197) - 정적 목록을 제시하기 위해
PagingData.from(List<T>)
생성자를 추가했습니다. 이 생성자는 전반적인 PagingData 플로우와 결합하여 초기 REFRESH가 완료되기 전 또는 단순한 테스트용 변환 등 특정 상태의 정적 목록을 표시할 수 있습니다. (Id134d) - dataRefresh Flow / Listener API의 지원이 중단되었습니다. 이러한 API는 REFRESH에서 제시된 항목 상태를 노출하기 위해 사용되는 API였으나 loadState Flow / Listener 콜백 타이밍과 itemCount 속성이 개선되면서 불필요하게 되었습니다. (Ia19f3)
PagingSource
및RemoteMediator
RxJava3 호환성 래퍼가 추가되었습니다. (I49ef3, b/161480176)
버그 수정
PositionalDataSource
가toPagingSourceFactory
도우미를 통해PagingSource
로 전환되며, Room에서 생성된PagingSource
가 이제 스스로 올바른 표시를 통해 점핑을 지원합니다. (I3e84c, b/162161201)- submitData의 동기 변형을 사용하면 때때로
ClosedSendChannelException
을 야기하는 경합 발생 버그가 수정되었습니다. (I4d702, b/160192222)
외부 기여
- Slack을 대신하여 RxJava3 호환성 래퍼를 추가해 주신 잭 스위어스님께 감사드립니다. (I49ef3, b/161480176)
버전 3.0.0-alpha03
2020년 7월 22일
androidx.paging:paging-*:3.0.0-alpha03
이 출시되었습니다. 버전 3.0.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- PagingState의 생성자가 공개되어 getRefreshKey()의 테스트 구현이 쉬워졌습니다. (I8bf15)
- 자바에서 DataSource Kotlin 매핑 함수 변형을 숨겨 원본 및 Kotlin 변형 사이의 모호성을 해결했습니다. (If7b23, b/161150011)
- Kotlin 사용자의 편의를 위한 중복 API가 @JvmSynthetic으로 표시되었습니다. (I56ae5)
- Loaditem.Page 생성자의 오버로드가 추가되었습니다. 이 항목은 itemsBefore 및 itemsAfter의 기본값을 COUNT_UNDEFINED로 지정합니다. (I47849)
- 기존 PagingData 연산자가 정지 메서드를 허용하게 되었으며 자바 사용자를 위한 새로운 mapSync, flatMapSync, filterSync 비정지 연산자가 도입되었습니다. 기존 변환 메서드가 확장 함수로 이동되었으므로 이제 Kotlin 사용자가 이를 가져와야 합니다. (I34239, b/159983232)
버그 수정
- Room(및 PositionalDataSource) PagingSources가 이제 첫 번째 페이지에 선행 구분자를 표시하므로 사용자가 이를 표시하기 위해 스크롤하지 않아도 됩니다. (I6f747, b/160257628)
- 이제 자리표시자의 항목 액세스가 PagingData.filter()로 변환된 후 요청된 색인을 충족하는 페이지가 반환될 때까지 PagingSource 로드를 올바르게 실행합니다. (Ie95ae, b/160038730)
- 때때로 PagingSource에서 오류를 반환한 후 스크롤하면 PagingDataAdapter.retry()에서 재시도하지 못하는 버그가 수정되었습니다. (I1084f, b/160194384)
- 항목 액세스가 prefetchDistance 내에 있더라도 페이지를 삭제한 후 항목 액세스가 페이지를 로드하지 못했던 문제가 해결되었습니다. (Ie95ae, b/160038730)
- PagingConfig.maxSize를 설정해도 더 이상 삭제 이벤트 후 자리표시자가 사용 설정되지 않습니다. (I2be29, b/129667766)
버전 3.0.0-alpha02
2020년 6월 24일
androidx.paging:paging-*:3.0.0-alpha02
가 출시되었습니다. 버전 3.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- 공통 기본값이 있는
PagingConfig
의 생성자를 위한 오버로드가 추가되었습니다. (I39c50, b/158576040) - 공통 기본값이 있는
PagingDataAdapter
및AsyncPagingDataDiffer
의 생성자를 위한 오버로드가 추가되었습니다. (Ie91f5) - 이제 어댑터 API,
dataRefreshFlow
및dataRefreshListener
가 부울을 전달하여PagingData
가 비어 있는지 알립니다. (I6e37e, b/159054196) - RemoteMediator를 위한 RxJava 및 Guava API인 RxRemoteMediator와 ListenableFutureRemoteMediator가 추가되었습니다.
isEmpty()
및firstItemOrNull()
과 같은 일반적인 항목 액세스를 위해 PagingState에 도우미가 추가되었습니다. (I3b5b6, b/158892717)
버그 수정
- Pager는 이제 팩토리에서 PagingSource 재사용을 확인하여 불명확한 오류를 발생시켰던 잘못된 PagingSource의 우발적인 재사용을 방지합니다. (I99809, b/158486430)
- RemoteMediator REFRESH에서 실패가 발생하더라도 더 이상 PagingSource가 로드되는 것을 막지 않습니다. (I38b1b, b/158892717)
- 정지되지 않은 버전의
submitData
는 정지 버전의submitData
이후에 호출될 때 여러PagingData
에서의 동시 수집으로 인해 더 이상 비정상 종료를 일으키지 않습니다. (I26358, b/158048877) - 구성 변경 후 발생할 수 있는 'pager에서 두 번 수집할 수 없음' 예외가 수정되었습니다. (I58bcc, b/158784811)
버전 3.0.0-alpha01
2020년 6월 10일
androidx.paging:paging-*:3.0.0-alpha01
이 출시되었습니다. 버전 3.0.0-alpha01에 포함된 커밋을 확인하세요.
Paging 라이브러리가 몇 가지 새로운 주요 기능을 사용할 수 있도록 3.0으로 업데이트되었습니다.
3.0의 새로운 기능
- Kotlin 코루틴 및 Flow를 위한 최고 수준의 지원 제공
- 코루틴 suspend 함수, RxJava Single 또는 Guava ListenableFuture 프리미티브를 사용한 비동기 로드 지원
- 재시도 및 새로고침 기능을 포함하여 반응형 UI 디자인을 위해 로드 상태와 오류 신호가 내장됨
- 저장소 레이어 개선
- 간소화된 데이터 소스 인터페이스
- 간소화된 네트워크 + 데이터베이스를 페이지로 나누기 기능
- 취소 지원
- 프레젠테이션 레이어 개선
알려진 문제
- Paging 3 javadocs는 아직 제공되지 않습니다. 제공되기 전까지 위에 링크로 제공된 가이드 또는 Kotlin 문서를 이용하세요. (b/158614050)
버전 2.1.2
버전 2.1.2
2020년 3월 18일
androidx.paging:paging:2.1.2
가 출시되었습니다. 2.1.0과 비교하여 버전 2.1.2에 포함된 커밋을 확인하세요.
버그 수정
- 드물지만 무효화 중에 위치를 변환하는 경우의
IndexOutOfBoundsException
을 수정합니다.
버전 문제
Paging 버전
2.1.1
이 구성이 잘못된 분기에서 잘못 출시되어 부분적으로 구현된 API와 향후 출시될 기능을 공개했습니다.Paging
2.1.2
에는 2.1.1에서 처음 출시된 부하 중심 수정이 포함되어 있지만 이번에는 이 수정이 2.1.0 버전 위에 올바르게 선별되었습니다. 현재 2.1.1 버전을 사용 중인 경우 이 버전으로 업그레이드하는 것이 좋습니다.
버전 2.1.1
버전 2.1.1
2019년 12월 18일
androidx.paging:paging-*:2.1.1
이 출시되었습니다. 버전 2.1.1에 포함된 커밋을 확인하세요.
버그 수정
- PositionalDataSources의 인접한 초기 로드는 자리표시자가 사용 중지된 시점의 마지막 액세스를 중심으로 합니다.
버전 2.1.0
버전 2.1.0
2019년 1월 25일
Paging 2.1.0
이 2.1.0-rc01
에서 변경사항 없이 출시되었습니다.
버전 2.1.0-rc01
2018년 12월 6일
Paging 2.1.0-rc01
이 2.1.0-beta01
에서 변경사항 없이 출시되었습니다.
버전 2.1.0-beta01
2018년 11월 1일
Paging 2.1.0-beta01
이 2.1.0-alpha01
에서 변경사항 없이 출시되었습니다.
버전 2.1.0-alpha01
2018년 10월 12일
Paging 2.1.0-alpha01
에는 페이지 삭제 및 모든 아티팩트를 위한 KTX 확장 프로그램 라이브러리라는 두 가지 주요 기능이 추가되었으며, 여러 가지 기타 API가 변경되고 버그가 수정되었습니다.
API 변경사항
- 메모리에 로드되는 항목의 수를 제한하도록
PagedList.Config.Builder.setMaxSize()
가 추가되었습니다. androidx.paging.Config()
가PagedList.Config.Builder
의 Kotlin 대안으로 추가되었습니다.androidx.paging.PagedList()
가PagedList.Builder
의 Kotlin 대안으로 추가되었습니다.DataSourceFactory.toLiveData()
가LivePagedListBuilder
의 Kotlin 대안으로 추가되었습니다.DataSourceFactory.toObservable()
및toFlowable()
이RxPagedListBuilder
의 Kotlin의 대안으로 추가되었습니다.- PagedList 전환 시 수신을 위해
AsyncPagedListDiffer.addPagedListListener()
가 추가되었습니다. (b/111698609) - 이전 목록과 새로운 목록을 전달하는
PagedListAdapter.onCurrentListChanged()
변형이 추가되고, 이전 변형이 지원 중단되었습니다. - diffing 다음에 pagedlist가 표시되는 경우 트리거되는 추가 콜백을 받는
PagedListAdapter/AsyncPagedListDiffer.submitList()
변형이 추가되었습니다. 이를 통해 PagedList 전환을 다른 UI 업데이트와 동기화할 수 있습니다. (b/73781068) PagedList.getLoadedCount()
가 추가되어 메모리에 있는 항목의 수를 알 수 있습니다. 자리표시자가 사용 중지된 경우 반환 값은 항상.size()
와 같습니다.
버그 수정
- diffing if 목록이 재사용될 때의 경합 상태가 해결되었습니다. (b/111591017)
- 색인이 올바르지 않은 경우 이제
PagedList.loadAround()
에서IndexOutOfBoundsException
이 발생합니다. 이전에는 명확하지 않은 다른 예외가 있을 때 다운됐습니다. - 극도로 작은 초기 로드 크기와 변경되지 않은 데이터가 함께 있으면 더 이상 로드되지 않는 문제가 해결되었습니다. (b/113122599)
버전 2.0.0
버전 2.0.0
2018년 10월 1일
Paging 2.0.0
이 출시되었으며 버그 1개가 수정되었습니다.
버그 수정
PositionalDataSource
및 자리표시자를 사용하여 매우 빠르게 스크롤할 때 발생할 수 있는 비정상 종료 문제를 해결했습니다. (b/114635383)
버전 2.0.0-beta01
2018년 7월 2일
버그 수정
- 일부 prepend 사례(자리표시자를 사용할 수 없음, PositionalDataSource)에서 콘텐츠가 사라지는 문제가 해결되었습니다. (b/80149146)
- (
1.0.1
에 이미 출시됨)PagedListAdapter
및AsyncPagedListDiffer
에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. (b/110711937)
AndroidX 이전 종속 항목
후속 Paging의 AndroidX 이전 버전의 경우 다음 종속 항목을 포함합니다.
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
버전 1.0.1
버전 1.0.1
2018년 6월 26일
Paging 1.0.1
이 출시되었습니다. 이 버전에서는 runtime
의 버그 1개가 수정되었습니다. 안정성을 위해 1.0.1
을 사용하는 것이 좋습니다. Paging RxJava2 1.0.1
도 출시되었으며, 이 버전은 1.0.0-rc1
과 동일합니다.
버그 수정
PagedListAdapter
및AsyncPagedListDiffer
에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. (b/110711937)
RxJava2 버전 1.0.0
RxJava2 버전 1.0.0-rc1
2018년 5월 16일
Paging RxJava2 1.0.0-rc1
은 초기 알파에서 변경사항 없이 버전 후보로 진행됩니다.
버전 1.0.0
버전 1.0.0-rc1
2018년 4월 19일 Paging 출시 후보
Paging 1.0.0
버전에 더 이상 알려진 문제가 없으며 새로운 기능을 추가하지 않을 예정입니다. 프로젝트를 업그레이드하여 1.0.0-rc1
을 사용하면 Google에서 테스트하여 완벽한 1.0.0
을 제공하는 데 도움이 됩니다.
이 출시는 변경사항이 없으며 1.0.0-beta1
과 동일합니다.
버전 1.0.0-beta1
2018년 4월 5일
Paging은 출시 후보로 처리되기 전에 잠시 베타 버전 상태가 됩니다.
Google은 향후 Paging 1.0
의 API를 변경할 계획이 없으며, 모든 API 변경은 기준이 매우 높습니다.
Paging의 알파 RxJava2 지원은 선택적인 별도 모듈로 출시되었으며(android.arch.paging:rxjava2:1.0.0-alpha1
) 안정화될 때까지 임시로 별도 버전이 지정될 예정입니다.
이 새로운 라이브러리는 LivePagedListBuilder
의 RxJava2 대안을 제공하며 Executor
대신 Scheduler
를 사용해 Observable
및 Flowable
을 구성할 수 있습니다.
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
자바
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
새로운 기능
RxPagedListBuilder
가 새로운android.arch.paging:rxjava2
아티팩트를 통해 추가되었습니다.
API 변경사항
빌더 내에서 실행기 역할을 명확히 하기 위한 API 변경사항:
setBackgroundThreadExecutor()
에서setFetchExecutor()
로 이름이 변경되었습니다(PagedList.Builder
및LivePagedListBuilder
).setMainThreadExecutor()
에서setNotifyExecutor()
로 이름이 변경되었습니다(PagedList.Builder
).
비공개가 되도록
PagedList.mCallbacks
멤버가 수정되었습니다.
버그 수정
LivePagedListBuilder
가 지정 Executor에서 Arch 구성요소 IO 스레드 풀 대신 초기PagedList
로드를 트리거합니다.내부
DataSource
래퍼(DataSource.map
뿐 아니라 자리표시자 사용이 중지된PositionalDataSource
로딩을 구현하는 데 사용됨)에서 잘못된 동작이 수정되었습니다. (b/77237534)
버전 1.0.0-alpha7
2018년 3월 21일
Paging 1.0.0-alpha7
이 Lifecycles 1.1.1
과 함께 출시되었습니다. Paging alpha7이 위에 언급된 Function
클래스의 이동에 의존함에 따라 lifecycle:runtime
종속 항목을 android.arch.lifecycle:runtime:1.1.1
로 업데이트해야 합니다.
Paging alpha7
은 Paging이 베타 상태가 되기 전에 최종 버전으로 출시될 예정입니다.
API 변경사항
- 이제
DataSource.LoadParams
객체에 공개 생성자가 있으며DataSource.LoadCallback
객체는 추상 객체입니다. 따라서DataSource
를 래핑하거나 모의 콜백으로DataSource
를 직접 테스트할 수 있습니다. (b/72600421) - DataSource 및 DataSource.Factory의 매퍼
map(Function<IN,OUT>)
을 사용하면DataSource
에서 로드한 결과를 변환, 래핑, 맞춤설정할 수 있습니다.mapByPage(<List<IN>,List<OUT>>)
는 동일한 작업을 일괄 처리합니다. 예를 들어 SQL에서 로드된 항목이 별도의 데이터베이스를 추가로 쿼리해야 하는 경우 일괄 작업으로 처리할 수 있습니다.
PagedList#getDataSource()
가 편의 메서드로 추가되었습니다. (b/72611341)recyclerview.extensions
패키지의 나머지 부분과LivePagedListProvider
를 포함하여 지원 중단된 모든 클래스가 API에서 삭제되었습니다.DataSource.Factory
가 인터페이스에서 추상 클래스로 변경되어 지도 기능을 사용 설정할 수 있습니다.
버그 수정
- 빌더가 최종 버전으로 변경되었습니다. (b/70848565)
- Room
DataSource
구현이 이제 다중 테이블 쿼리를 처리하도록 수정되었습니다. 이 수정사항은 Room 1.1.0-beta1에 포함되어 있습니다(위 참조). - 자리표시자가 사용 설정되고 총 크기가 정확히 페이지 크기의 배수인 경우
PositionalDataSource
에BoundaryCallback.onItemAtEndLoaded
가 호출되지 않는 버그가 수정되었습니다.
버전 1.0.0-alpha5
2018년 1월 22일
버그 수정
- 자리표시자 사용이 중지되었을 때 페이지 로드가 수정되었습니다. (b/70573345)
- IllegalArgumentException 버그를 추적하기 위한 추가 로깅이 수정되었습니다. (b/70360195)(및 추론에 의한 Room 수정)
- Javadoc 샘플 코드가 수정되었습니다. (b/70411933, b/71467637)