Paging

Paging 라이브러리를 사용하면 앱의 RecyclerView 내 데이터를 점진적이고 매끄럽게 로드할 수 있습니다.

이 표에는 androidx.paging 그룹의 모든 아티팩트가 나열됩니다.

아티팩트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
paging-* 3.0.1 - - 3.1.0-alpha03
paging-compose - - - 1.0.0-alpha12
이 라이브러리는 2021년 7월 21일에 최종 업데이트되었습니다.

종속 항목 선언

Paging에 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소에서 확인하세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
  def paging_version = "3.0.1"

  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:1.0.0-alpha12"
}

Kotlin

dependencies {
  val paging_version = "3.0.1"

  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:1.0.0-alpha12")
}

Kotlin 확장 프로그램 사용에 관한 내용은 ktx 문서를 참고하세요.

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 의견을 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 3.0.0

버전 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-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.appendLoading에서 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에 포함된 커밋을 확인하세요.

버그 수정

  • LivePagedListRxPagedList로 생성된 초깃값에서 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.appendLoading에서 NotLoading으로 전환되어 원격 업데이트가 적용될 수 있도록 업데이트되었습니다. (I65619)
  • LoadParams.pageSize가 삭제되었습니다(이미 지원 중단됨). PagingSource에 LoadParams.loadSize를 사용하는 것이 좋습니다.

    LoadParams.loadSize는 항상 PagingConfig.pageSize와 같습니다. 단, 초기 로드 호출은 예외이며 PagingConfig.initialLoadSize와 같습니다.

    Pager 또는 PagedList를 사용하지 않고 Paging2 DataSource를 테스트하며 initialLoadSize를 설정하는 경우 pageSizePagingConfig.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 변경사항

  • 지원 중단된 dataRefreshFlowdataRefreshListener API가 loadStateFlow/Listener 업데이트와 중복되어 삭제되었습니다. 이러한 마이그레이션에서는 다음이 loadStateFlow에 해당합니다.

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908)

버그 수정

  • RemoteMediator REFRESH의 endOfPaginationReached가 이제 LoadState 업데이트로 올바르게 전파되고 원격 APPENDPREPEND가 트리거되지 않도록 합니다. (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/117371720

버전 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 변경사항

  • 페이지 로드를 트리거하지 않고 제시된 데이터 액세스를 허용하도록 AsyncPagingDataDifferPagingDataAdapterpeek() API를 추가했습니다. (I38898, b/159104197)
  • 페이지 가져오기를 트리거하지 않고 제시된 항목을 검색할 수 있도록 PagingDataAdapterAsyncPagingDataDiffersnapshot() API를 추가했습니다. (I566b6, b/159104197)
  • 정적 목록을 제시하기 위해 PagingData.from(List<T>) 생성자를 추가했습니다. 이 생성자는 전반적인 PagingData 플로우와 결합하여 초기 REFRESH가 완료되기 전 또는 단순한 테스트용 변환 등 특정 상태의 정적 목록을 표시할 수 있습니다. (Id134d)
  • dataRefresh Flow / Listener API의 지원이 중단되었습니다. 이러한 API는 REFRESH에서 제시된 항목 상태를 노출하기 위해 사용되는 API였으나 loadState Flow / Listener 콜백 타이밍과 itemCount 속성이 개선되면서 불필요하게 되었습니다. (Ia19f3)
  • PagingSourceRemoteMediator RxJava3 호환성 래퍼가 추가되었습니다(I49ef3, b/161480176).

버그 수정

  • PositionalDataSourcetoPagingSourceFactory 도우미를 통해 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)
  • 공통 기본값이 있는 PagingDataAdapterAsyncPagingDataDiffer의 생성자를 위한 오버로드가 추가되었습니다. (Ie91f5)
  • 이제 어댑터 API, dataRefreshFlowdataRefreshListener가 부울을 전달하여 PagingData가 비어 있는지 알립니다. (I6e37e, b/159054196)
  • RemoteMediator를 위한 RxJava 및 Guava API인 RxRemoteMediatorListenableFutureRemoteMediator가 추가되었습니다.
  • 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의 새로운 기능

알려진 문제

  • 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.02.1.0-rc01에서 변경사항 없이 출시되었습니다.

버전 2.1.0-rc01

2018년 12월 6일

Paging 2.1.0-rc012.1.0-beta01에서 변경사항 없이 출시되었습니다.

버전 2.1.0-beta01

2018년 11월 1일

Paging 2.1.0-beta012.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에 이미 출시됨) PagedListAdapterAsyncPagedListDiffer에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. (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과 동일합니다.

버그 수정

  • PagedListAdapterAsyncPagedListDiffer에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. (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를 사용해 ObservableFlowable을 구성할 수 있습니다.

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.BuilderLivePagedListBuilder).

    • 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에 포함되어 있습니다(위 참조).
  • 자리표시자가 사용 설정되고 총 크기가 정확히 페이지 크기의 배수인 경우 PositionalDataSourceBoundaryCallback.onItemAtEndLoaded가 호출되지 않는 버그가 수정되었습니다.

버전 1.0.0-alpha5

2018년 1월 22일

버그 수정

  • 자리표시자 사용이 중지되었을 때 페이지 로드가 수정되었습니다. b/70573345
  • IllegalArgumentException 버그를 추적하기 위한 추가 로깅이 수정되었습니다. b/70360195(및 추론에 의한 Room 수정)
  • Javadoc 샘플 코드가 수정되었습니다. (b/70411933, b/71467637 참조)