아키텍처 구성요소 출시 노트

이 페이지에서는 알려진 문제, 제한, 일반 권고 사항을 비롯하여 아키텍처 구성요소의 출시 정보를 제공합니다. 아키텍처 구성요소를 사용하기 전에 출시 노트를 검토하시기 바랍니다.

여러분의 의견이 필요합니다. Issue Tracker를 통해 문제를 신고해 주시면 의견을 종합하여 최종 출시 버전에 반영하겠습니다.

아키텍처 구성요소를 사용하는 다른 개발자와 문제나 아이디어를 논의하려면 Android 개발 Google+ 커뮤니티에 가입하고 아키텍처 구성요소 카테고리를 참조하세요.

2018년 8월 16일

WorkManager

WorkManager 1.0.0-alpha07이 출시되었습니다. 이 릴리스에서는 버그가 수정되고 API가 일부 변경되었습니다.

버그 수정

  • 음수 제한이 지정된 SQL 쿼리가 무제한의 결과를 반환할 수 있는 문제가 해결되었습니다.
  • 실행을 완료한 작업이 이제 다른 스케줄러에 있는 동일한 작업의 대기 중인 복사본을 모두 올바로 취소합니다. 이 문제로 JobScheduler 작업 수 제한이 초과되었습니다. b/111569265
  • ConstraintTrackerConcurrentModificationException이 수정되었습니다. b/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String)의 반환 유형 주석이 @NonNull 대신 @Nullable로 변경되었습니다. b/112275229

API 변경사항

  • Worker가 이제 새로운 클래스인 NonBlockingWorker로 확장됩니다. 변경돼도 현재 사용에는 영향을 미치지 않습니다. 향후 NonBlockingWorker는 맞춤 스레딩 솔루션을 완벽하게 지원하는 엔티티가 될 것입니다.
  • Data.getBooleanArray(String)Data.getIntArray(String)의 반환 유형 주석이 @NonNull 대신 @Nullable로 변경되었습니다. b/112275229
  • Kotlin 확장 프로그램: 기존 API와의 일관성을 향상하도록 Map.toWorkData()의 지원이 중단되고 최상위 수준 workDataOf(vararg Pair<String, Any?>)가 추가되었습니다.

2018년 8월 10일

탐색 1.0.0-alpha05가 출시되었습니다. 이 릴리스에서는 버그가 수정되었습니다.

버그 수정

  • 잘못된 백스택 동작을 일으키는 버그가 수정되었습니다. b/111907708
  • Generated Args 클래스의 equals()에 있는 버그가 수정되었습니다. b/111450897
  • Safe Args의 빌드 실패가 해결되었습니다. b/109409713
  • 리소스 식별자에서 자바 이름으로의 변환이 수정되었습니다. b/111602491
  • Safe Args 플러그인의 null 허용 여부 관련 오류 메시지가 수정되었습니다.
  • 누락된 null 허용 여부 주석이 추가되었습니다.

2018년 8월 1일

WorkManager

WorkManager 1.0.0-alpha06이 출시되었습니다. 이 릴리스에서는 버그가 수정되었습니다.

버그 수정

  • 작업을 예약할 때 데이터베이스 잠금을 방지합니다. b/111801342
  • 잠자기 모드일 때 PeriodicWork가 일정에 맞춰 실행되지 않는 버그가 수정되었습니다. b/111469837
  • 제약 조건을 추적할 때 WorkManager가 비정상 종료되는 경합 상태가 해결되었습니다. googlecodelabs/android-workmanager/issues/56
  • WorkRequest.Builder#build()를 사용할 때 고유 WorkRequest가 생성됩니다. b/111408337
  • WorkRequest에 필요할 때만 RescheduleReceiver를 사용 설정합니다. b/111765853

2018년 7월 24일

WorkManager

WorkManager 1.0.0-alpha05가 출시되었습니다. 이 릴리스에서는 중요한 버그가 수정되고 로깅이 변경되었습니다.

API 변경사항

  • WorkManager.getInstance()에 이제 @Nullable 대신 @NonNull로 주석이 달립니다. 대신 수동 초기화의 경우 단일 항목이 제대로 초기화되지 않으면 메서드에서 IllegalStateException을 발생시킵니다. 획기적인 API 변경사항입니다.
  • 새 API인 Configuration.Builder.setMinimumLoggingLevel(int)가 추가되었습니다. 이 API는 WorkManager 상세 출력을 제어할 수 있습니다. 기본적으로 WorkManager는 Log.INFO 이상을 로그합니다.
  • 암시적으로 null인 기본값을 더 이상 받지 않도록 Data.getString()의 서명이 변경되었습니다. 획기적인 API 변경사항입니다.
  • 내부용으로만 필요한 일부 메서드가 @hide로 표시됩니다. 여기에는 Constraints 생성자, Data.toByteArray(), Data.fromByteArray(byte[])가 포함됩니다. 획기적인 API 변경사항입니다.

버그 수정

  • 알려진 자동 백업이 진행되는 동안 WorkManager가 더 이상 작업을 실행하지 않습니다. 이 문제로 비정상 종료가 발생할 수 있었습니다. b/110564377
  • JobScheduler를 사용할 때 PeriodicWorkRequest의 이중 예약 문제가 해결되었습니다. b/110798652
  • 기기가 잠자기 모드에 들어간 후 PeriodicWorkRequest가 올바로 실행되지 않는 문제가 해결되었습니다. b/111469837
  • Firebase JobDispatcher를 사용할 때 초기 지연되는 문제가 해결되었습니다. b/111141023
  • 일부 경합 상태 가능성 및 타이밍 관련 문제가 해결되었습니다.
  • 더 이상 필요하지 않은 BroadcastReceiver가 올바로 해제됩니다.
  • 앱이 강제 종료 후 다시 시작할 때 일정 변경 성능이 최적화됩니다.
  • 지정된 WorkRequest를 대기열에 추가하기 전이나 후에 TestScheduler.setAllConstraintsMet(UUID) 호출이 허용됩니다. b/111238024

획기적인 변경사항

  • WorkManager.getInstance()에 이제 @Nullable 대신 @NonNull로 주석이 달립니다.
  • 암시적으로 null인 기본값을 더 이상 받지 않도록 Data.getString()의 서명이 변경되었습니다.
  • 내부용으로만 필요한 일부 메서드가 @hide로 표시됩니다. 여기에는 Constraints 생성자, Data.toByteArray(), Data.fromByteArray(byte[])가 포함됩니다.

2018년 7월 19일

탐색 1.0.0-alpha04 및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.

API/동작 변경사항

  • NavHostFragment는 항상 현재 프래그먼트를 기본 탐색 프래그먼트로 설정하여, 하위 프래그먼트 관리자가 열린 후에야 외부 NavController가 열리도록 합니다. b/111345778

Safe Args

  • 획기적인 변경사항: ConstraintLayout 2.0.0-alpha1과 같은 다른 라이브러리와의 충돌을 피하기 위해 app:typeapp:argType으로 변경되었습니다. b/111110548
  • 이제 Safe Args의 오류 메시지를 클릭할 수 있습니다. b/111534438
  • 이제 Args 클래스에서 NonNull 속성이 실제로 null이 아님을 확인합니다. b/111451769
  • NavDirections 및 Args에서 생성한 클래스에 NonNull 주석이 추가되었습니다. b/111455455 b/111455456

버그 수정

  • 프래그먼트 대상으로 딥 링크 후 발생하는 시스템 뒤로 버튼의 문제가 해결되었습니다. b/111515685

2018년 7월 12일

탐색 1.0.0-alpha03 및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.

API/동작 변경사항

  • 툴바에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. b/109868820
  • CollapsingToolbarLayout에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. b/110887183
  • 이제 백스택이 비어 있거나 지정된 대상 ID가 백스택에 없으면 popBackStack()에서 false를 반환합니다. b/110893637
  • 이제 FragmentManager가 상태를 저장하고 나면 FragmentNavigator가 탐색 작업을 무시하여 'onSaveInstanceState 후 이 작업을 수행할 수 없음' 예외가 방지됩니다. b/110987825

Safe Args

  • 획기적인 변경사항: 작업과 인수 이름에 포함된 영숫자 이외의 문자는 각각의 NavDirections 메서드 이름에서 카멜식 대소문자 표기로 대체됩니다.
    • 예: DemoController.indexsetDemoControllerIndex가 됩니다. b/79995048
    • 예: action_show_settingsactionShowSettings가 됩니다. b/79642240
  • 획기적인 변경사항: 이제 인수는 기본적으로 null이 아닌 것으로 간주됩니다. 문자열과 Parcelable 인수에 null 값을 허용하려면 app:nullable="true"를 추가하세요. b/79642307
  • 이제 app:type="long"을 defaultValues와 함께 '123L' 형태로 사용할 수 있습니다. b/79563966
  • Parcelable 인수가 이제 app:type의 정규화된 클래스 이름을 사용하여 지원됩니다. 지원되는 유일한 기본값은 "@null"입니다. b/79563966
  • Args 클래스에서 이제 equals()hashCode()를 구현합니다. b/79642246
  • 이제 라이브러리 프로젝트에 Safe Args 플러그인을 적용할 수 있습니다. b/80036553
  • 이제 기능 프로젝트에 Safe Args 플러그인을 적용할 수 있습니다. b/110011752

버그 수정

  • 프래그먼트 수명 주기 메서드가 수행되는 동안 탐색할 때 발생하는 문제가 해결되었습니다. b/109916080
  • 중첩된 그래프를 여러 번 탐색할 때 발생하는 문제가 해결되었습니다. b/110178671
  • 그래프에서 첫 번째 대상으로 setPopUpTo를 사용할 때 발생하는 문제가 해결되었습니다. b/109909461
  • 모든 app:defaultValue 값이 문자열로 전달되는 문제가 해결되었습니다. b/110710788
  • Android Gradle 플러그인 3.2 베타 01에 번들로 제공되는 aapt2에서 이제 탐색 XML 파일의 모든 android:name 속성에 keep 규칙을 추가합니다. b/79874119
  • 기본 FragmentNavigator를 대체할 때 발생하는 메모리 누수가 해결되었습니다. b/110900142

2018년 7월 2일

Lifecycle, Room, Paging의 AndroidX 버전에서 2.0.0-beta01 버전을 출시합니다.

Lifecycle

버그 수정

  • 하위 인터페이스가 아닌 구현만 유지하도록 LifecycleObserver Proguard 규칙이 수정되었습니다. b/71389427
  • 난독화와 축소를 허용하도록 ViewModel Proguard 규칙이 수정되었습니다.

Room

API/동작 변경사항

  • 쿼리가 실행되는 위치의 맞춤설정을 허용하도록 RoomDatabase.Builder.setQueryExecutor()가 추가되었습니다.
  • RxJava2 Observable 지원이 추가되었습니다.
  • 생성된 DAO 및 데이터베이스 구현이 최종 마무리되었습니다.

버그 수정

  • '필드의 getter를 찾을 수 없음' 오류에서 클래스/필드 이름이 지정됩니다. b/73334503
  • Room 이전 버전과의 RoomOpenHelper 호환성이 수정되었습니다. b/110197391

Paging

버그 수정

  • 일부 prepend 사례(자리표시자를 사용할 수 없음, PositionalDataSource)에서 콘텐츠가 사라지는 문제가 해결되었습니다. b/80149146
  • (1.0.1에 이미 출시됨) PagedListAdapterAsyncPagedListDiffer에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. b/110711937

2018년 6월 26일

Paging

Paging 1.0.1이 출시되었습니다. 이 릴리스에서는 runtime의 버그 1개가 수정되었습니다. 안정성을 위해 1.0.1을 사용하는 것이 좋습니다. Paging RxJava2 1.0.1도 출시되었으며, 이 릴리스는 1.0.0-rc1과 동일합니다.

버그 수정

  • PagedListAdapterAsyncPagedListDiffer에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. b/110711937

WorkManager

WorkManager 1.0.0-alpha04가 출시되었습니다.

버그 수정

  • 이제 AlarmManager 기반 구현을 사용할 때 PeriodicWorkRequest 일정이 올바로 변경됩니다.

  • 강제 종료나 재부팅 후 모든 작업자의 일정을 변경할 때 ANR 발생 가능성이 해결되었습니다. b/110507716

  • 다양한 WorkManager API에 null 허용 여부 주석이 추가되었습니다. b/110344065

  • Worker 실행 중 발생하는 포착되지 않는 예외 로그가 기록됩니다. b/109900862

  • WorkManager의 이전 버전으로 롤백하는 경우 파괴적인 데이터베이스 마이그레이션이 허용됩니다. b/74633270

  • 중복된 암시적 태그를 만드는 경우 마이그레이션이 비정상 종료되는 문제가 해결되었습니다. 이 문제는 동일한 암시적 태그 형식을 직접 사용한 경우에만 드물게 발생했습니다.

2018년 6월 19일

Room

Room 1.1.1이 출시되었습니다. 이 릴리스는 Room 1.1.1-rc1과 동일합니다.

WorkManager

WorkManager 1.0.0-alpha03이 출시되었습니다.

버그 수정

  • AlarmManager 기반 구현의 경합 상태가 해결되었습니다. b/80346526.

  • 기기 재부팅 후 JobScheduler를 사용할 때 작업이 중복되는 문제가 해결되었습니다.

  • 콘텐츠 URI 트리거가 포함된 작업이 이제 재부팅 내내 지속됩니다. b/80234744

  • 문서가 업데이트되었습니다. b/109827628, b/109758949, b/80230748

  • WorkRequest를 대기열에 다시 추가할 때 발생하는 비정상 종료 문제가 해결되었습니다. b/109572353.

  • work-runtime-ktx 종속성을 사용할 때 Kotlin 컴파일러 경고가 발생하는 문제가 해결되었습니다.

  • WorkManager에서 이제 Room 버전 1.1.1-rc1을 사용합니다.

API 변경사항

  • WorkContinuation.getStatuses()의 동기 버전인 getStatusesSync()가 추가되었습니다.

  • Worker는 사용자가 시작한 취소와 임시 OS에서 요청한 중지를 구분할 수 있습니다. 어떤 유형이든 중지가 요청된 경우 Worker.isStopped()에서 true를 반환합니다. 작업이 명시적으로 취소된 경우 Worker.isCancelled()에서 true를 반환합니다. b/79632247

  • API 28에 JobParameters#getNetwork() 지원이 추가되었습니다. 이는 Worker.getNetwork()를 통해 나타납니다.

  • Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)가 추가되어 JobScheduler 또는 AlarmManager에 전송될 수 있는 작업 수를 적용할 수 있습니다. 이를 통해 WorkManager가 사용 가능한 모든 JobScheduler 슬롯을 차지하지 않도록 방지할 수 있습니다.

  • WorkManager가 사용하기에 안전한 JobScheduler 작업 ID의 범위를 정의하는 데 도움이 되는 Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)가 추가되었습니다. b/79996760

  • Worker.getRunAttemptCount()는 특정 Worker의 현재 실행 수를 반환합니다. b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)를 사용하면 고유 PeriodicWorkRequest를 대기열에 추가할 수 있습니다. b/79600647

  • WorkManager.cancelAllWork()는 모든 Worker를 취소합니다. WorkManager를 사용하는 라이브러리는 이 메서드가 내부 상태의 추가 정리를 위해 WorkManager.getLastCancelAllTimeMillis()를 사용하여 언제 마지막으로 호출되었는지 쿼리할 수 있습니다.

  • 완료된 작업을 내부 데이터베이스에서 삭제하기 위해 WorkManager.pruneWork()가 추가되었습니다. b/79950952, b/109710758

동작 변경사항

  • 모든 WorkRequest에 암시적인 태그가 추가되었습니다. 이 태그는 Worker의 정규화된 클래스 이름입니다. 태그를 사용하면 tag가 없거나 id를 사용할 수 없을 때 WorkRequest를 삭제할 수 있습니다. b/109572351

획기적인 변경사항

  • Worker.WorkerResult 이름이 Worker.Result로 변경되었습니다.

  • 이제 Worker가 명시적으로 취소되면 true로 설정되는 추가 isCancelled 매개변수가 Worker.onStopped에 있습니다.

2018년 6월 7일

탐색 1.0.0-alpha02가 출시되었습니다.

동작 변경사항

  • FragmentNavigator에서 이제 setReorderingAllowed(true)를 사용합니다. b/109826220

  • 탐색이 이제 딥 링크 URL에서 파싱된 URLDecodes URL 인수를 디코딩합니다. b/79982454

버그 수정

  • 프래그먼트 수명 주기 메서드에서 탐색을 호출할 때 발생하는 IllegalStateException이 수정되었습니다. b/79632233

  • 애니메이션 사용 시 깜박이는 문제를 해결하기 위해 탐색에서 이제 지원 라이브러리 27.1.1을 사용합니다. b/80160903

  • 하위 프래그먼트로 defaultNavHost="true"를 사용할 때 발생하는 IllegalArgumentException이 수정되었습니다. b/79656847

  • NavDeepLinkBuilder를 사용할 때 발생하는 StackOverflowError가 해결되었습니다. b/109653065

  • 중첩된 그래프로 다시 이동할 때 발생하는 IllegalArgumentException이 수정되었습니다. b/80453447

  • launchSingleTop 사용 시 프래그먼트가 중첩되는 문제가 해결되었습니다. b/79407969

  • 탐색에서 이제 중첩된 그래프의 올바른 합성 백스택을 빌드합니다. b/79734195

  • 이제 MenuItem으로 중첩된 그래프를 사용할 때 탐색에서 올바른 항목을 강조표시합니다. b/109675998

API 변경사항

  • NavOptions에 포함된 작업 및 관련 API의 clearTask 속성 지원이 중단되었습니다. b/80338878

  • NavOptions에 포함된 작업 및 관련 API의 launchDocument 속성 지원이 중단되었습니다. b/109806636

2018년 5월 24일

WorkManager 1.0.0-alpha02가 출시되었습니다.

WorkManager

버그 수정

  • State.isFinished()NullPointerException이 수정되었습니다. b/79550068

  • Application.onCreate()에서 Worker의 일정 변경을 일으키는 문제가 해결되었습니다. b/79660657

  • OS에서 허용하는 작업보다 더 많이 작업을 예약할 수 있는 문제가 해결되었습니다. b/79497378

  • Worker 관련 wake lock 정리를 백그라운드 스레드로 이동했습니다.

  • 이제 대기 중인 작업이 모두 완료되면 AlarmManager 구현이 올바로 정리됩니다.

  • 영어 이외의 언어에 영향을 미쳤던 정리 SQL 쿼리가 수정되었습니다. b/80065360

  • Datafloat 지원이 추가되었습니다. b/79443878

  • Data.Builder.putAll()에서 이제 Builder의 인스턴스를 반환합니다. b/79699162

  • 문서에 Javadoc 및 수정사항이 추가되었습니다. b/79691663

API 변경사항

  • Worker가 중지에 반응할 수 있습니다. Worker.isStopped()를 사용하여 Worker가 중지되었는지 확인할 수 있습니다. Worker.onStopped()를 사용하여 간단한 정리 작업을 수행할 수 있습니다.

  • Worker.getTags() API가 Worker와 관련된 태그의 Set를 반환합니다.

  • javax.time.Duration 오버로드가 기간과 TimeUnit의 조합을 받는 API에 추가되었습니다. 이 API는 @RequiresApi(26)에 의해 보호됩니다.

  • WorkManager 확장 프로그램이 androidx.work.ktx 패키지에서 androix.work 패키지로 이동했습니다. 이전 확장 프로그램은 지원이 중단되었으며 향후 버전에서 제거될 예정입니다.

  • Configuration.withExecutor()는 지원이 중단되었습니다. 대신 Configuration.setExecutor()를 사용하세요.

2018년 5월 16일

Paging RxJava2 1.0.0-rc1 및 Room 1.1.1-rc1이 출시되었습니다. 마이그레이션을 사용 중인 경우 Room 1.1.0 대신 1.1.1-rc1을 사용하는 것이 좋습니다.

Room

Room에서 마이그레이션 후 초기화를 제대로 처리하지 못하는 버그가 수정되었습니다. b/79362399

Paging

Paging rxjava2는 초기 알파에서 변경 없이 출시 후보로 진행됩니다.

2018년 5월 8일

Paging 1.0, 탐색 및 WorkManager 알파, Room 1.1, AndroidX

Paging 1.0.0Room 1.1.0이 2개의 새로운 아키텍처 구성요소인 탐색 및 WorkManager의 알파와 함께 출시되었습니다.

Paging과 Room은 최신 출시 후보가 된 후 변경된 사항이 없습니다.

새 라이브러리: 탐색

탐색은 인앱 탐색 빌드를 위한 프레임워크를 제공합니다. 최초 출시 버전은 1.0.0-alpha01입니다.

새 라이브러리: WorkManager

WorkManager는 제약 조건을 인식하는 보장된 백그라운드 작업의 예약과 실행을 간소화합니다. 최초 출시 버전은 1.0.0-alpha01입니다.

AndroidX

패키지 이름, 아티팩트 이름, 다른 AndroidX 라이브러리의 종속성 업데이트를 비롯한 아키텍처 구성요소가 AndroidX의 일부가 되어가고 있습니다. 이러한 구성요소는 다른 AndroidX 라이브러리와 함께 사용할 수 있도록 2.0.0-alpha1 버전에 출시됩니다.

Kotlin 확장 프로그램

ViewModel, ReactiveStreams, Sqlite(이전 Room의 '데이터베이스' 구성요소)는 모두 Kotlin 확장 프로그램 라이브러리를 AndroidX 알파 릴리스의 일부로 추가했습니다. 또한 탐색과 WorkManager에 -ktx 모듈이 포함됩니다. 각 확장 프로그램 모듈은 구성요소 추가에서 찾을 수 있습니다.

2018년 5월 2일

  • Room 1.1.0 출시 후보
  • Room 1.1.0-rc1이 출시되었습니다.

버그 수정

  • Room이 이제 Kotlin 1.2.40과 호환됩니다. b/78328708

2018년 4월 19일

Paging 출시 후보

Paging 1.0.0-rc1 및 Room 1.1.0-beta3이 출시되었습니다.

Paging

Paging 1.0.0 릴리스에 더 이상 알려진 문제나 새로운 기능 추가 일정이 없습니다. 프로젝트를 업그레이드하여 1.0.0-rc1을 사용하시면 Google에서 테스트하여 완벽한 1.0.0을 제공하는 데 도움이 됩니다.

이 릴리스에는 변경사항이 없으며 1.0.0-beta1과 동일합니다.

Room

버그 수정

  • Kotlin POJO에서 자바에 정의된 관계 엔티티를 참조할 때 발생하는 컴파일 오류가 수정되었습니다. b/78199923

2018년 4월 5일

Room 1.1.0-beta2, Paging 1.0.0-beta1, Paging RxJava 1.0.0-alpha1이 출시되었습니다.

Paging은 출시 후보로 진행되기 전에 잠시 베타 상태로 있게 됩니다. Google은 향후 Paging 1.0의 API를 변경할 계획이 없으며, 모든 API 변경은 기준이 매우 높습니다.

Paging의 알파 RxJava2 지원은 선택적인 별도 모듈(android.arch.paging:rxjava2:1.0.0-alpha1)로 출시되었으며, 안정화될 때까지 임시로 별도 버전이 지정될 예정입니다.

이 새로운 라이브러리는 LivePagedListBuilder의 RxJava2 대안을 제공하며, ObservableFlowable을 구성하여 Executor 대신 Scheduler를 받을 수 있습니다.

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Paging

새로운 기능

  • 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

Room

버그 수정

  • 예정보다 빨리 쿼리를 재활용하면 반환된 Single 또는 Maybe 인스턴스에 관찰자를 둘 이상 추가하는 경우 문제를 일으키는 Room의 Rx SingleMaybe 구현의 중대한 버그가 수정되었습니다. b/76031240

  • RoomDatabase.clearAllTables가 트랜잭션 내에서 호출되면 데이터베이스를 VACUUM하지 않게 됩니다. b/77235565

2018년 3월 21일

Room 1.1.0-beta1, Paging 1.0.0-alpha7, Lifecycles 1.1.1이 출시되었습니다.

Room

API 변경사항

버그 수정

  • RoomDatabase.clearAllTables에서 이제 WAL 체크포인트를 설정하고 데이터베이스를 VACUUM하여 운영체체에 공백을 다시 반환하려고 시도합니다.

  • Pojo가 Embedded 필드나 Relation을 통해 하나 이상의 엔티티를 참조하는 한 이제 @RawQuery에서 observedEntities 속성의 모든 Pojo를 허용합니다. b/74041772

  • Paging: Room의 DataSource 구현에서 이제 다중 테이블 종속성(예: 관계, 조인)을 올바로 처리합니다. 이전에는 새로운 결과를 트리거하지 못하거나 컴파일하지 못했습니다. b/74128314

Lifecycle

약간의 변경사항 1개: android.arch.core.util.Functionarch:runtime에서 arch:common으로 이동했습니다. 이를 통해 런타임 종속성이 없어도 사용할 수 있습니다(예: 아래 paging:common 참조).

lifecycle:commonlifecycle:runtime의 종속성이므로, 이러한 변경은 lifecycle:runtime에 직접 영향을 주지 않으며, Paging과 마찬가지로 lifecycle:common에 직접 의존하는 모듈만 영향을 받습니다.

Paging

Paging 1.0.0-alpha7이 Lifecycle 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의 Mapper
    • 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가 호출되지 않는 버그가 수정되었습니다.

2018년 3월 2일

Room 1.1.0-alpha3이 출시되었습니다. Room 1.1.0에 마지막으로 계획된 알파 릴리스입니다.

API 변경사항

  • 이제 InvalidationTrackeraddObserverremoveObserver가 동기화되고 UI가 아닌 스레드에서 호출되어야 합니다. 이렇게 되면 테이블을 관찰하는 동안 발생하는 일부 경합 상태가 방지됩니다.

  • RoomDatabase에 클래스에 모든 테이블 콘텐츠를 잘라내는 새로운 clearAllTables() 메서드가 있습니다. b/63807999

  • 이제 SupportSQLiteQuery에 다양한 쿼리 매개변수를 반환하는 getArgCount() 메서드가 있습니다. b/67038952

버그 수정

  • 이제 @RawQuery가 Paging 쿼리에서 올바로 지원됩니다. b/72600425

  • 동일한 패키지의 내부 클래스에 Dao 인터페이스가 2개 이상인데 이름이 동일한 경우 이름이 충돌하지 않도록, 생성된 Dao 클래스 이름을 이제 Room에서 올바로 지정합니다. b/73536380

  • Pojo의 일반 필드 유형이 확장 클래스의 멤버로 올바르게 파싱됩니다. b/73534868

  • 종속성 아티팩트에서 상속된 Dao 인터페이스의 쿼리 매개변수가 이제 올바로 파싱됩니다. b/68118746

  • @Relation과 관련하여 생성된 쿼리가 이제 필드 이름을 제대로 이스케이프 처리합니다. b/70925483

2018년 2월 27일

Paging 1.0.0-alpha6이 지원 라이브러리 릴리스 27.1.0과 함께 출시되었습니다. ListAdapter와 몇 가지 관련 클래스가 페이징 라이브러리에서 곧바로 Recyclerview로 이동했으며, 특정 클래스의 기능을 명확히 하기 위해 이름이 몇 개 변경되었습니다. 이 페이징의 알파 릴리스는 중요한 API를 대폭 변경한 최종 릴리스가 될 수 있습니다.

API 변경사항

  • 다음 클래스가 recyclerview-v7로 이동했습니다.
    • ListAdapter
  • 다음 클래스가 이름이 변경되고 recyclerview-v7로 이동했습니다.
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • 페이징 런타임 내부에서 다음 클래스의 이름이 변경되었습니다.
    • PagedListAdapterHelper -> AsyncPagedListDiffer

이동된 클래스는 페이징 라이브러리와는 별개로 RecyclerView와 함께 유용하게 사용되었습니다. 즉, Paging 알파 릴리스에 의존하지 않고 사용될 수 있지만, Paging을 사용하는 앱은 알파 6 및 지원 라이브러리 27.1.0으로 동시에 업그레이드해야 합니다.

** Paging Alpha6 마이그레이션 가이드: **

  • 페이징 및 recyclerview 종속성을 android.arch.paging:runtime:1.0.0-alpha6com.android.support:recyclerview-v7:27.1.0으로 업데이트
    • ListAdapter가 Paging에서 RecyclerView로 이동했으므로 이 업데이트는 동시에 수행되어야 합니다.
  • ListAdapterHelper의 모든 AsyncListDiffer 참조 업데이트
    • 더 명시적인 getCurrentList().getItem(index)getCurrentList().size()의 호출 패턴에 따라 getItem(index)/getItemCount()가 삭제되었습니다.
  • AsyncDifferConfig에 대한 ListAdapterConfig의 모든 참조 업데이트
  • DiffUtil.IttemCallback에 대한 DiffCallback의 모든 참조 업데이트IttemCallback
  • AsyncPagedListDiffer에 대한 PagedListAdapterHelper의 모든 참조 업데이트
  • submitList()에 대한 setList()의 모든 참조 업데이트
    • 목록 diffing의 비동기 특성을 명확히 하기 위해 이름이 변경되었습니다.

버그 수정

  • 자리표시자 사용이 중지되었을 때 초기 로드에 잘못된 초기 위치를 전달하는 문제가 해결되었습니다. b/73513780

2018년 2월 15일

Room 1.1.0-alpha2가 출시되었습니다.

새로운 기능

  • Room에서 이제 WAL(Write Ahead Logging) 모드로 데이터베이스 열기를 지원합니다. 이 모드에서는 쓰기가 더 이상 읽기 쿼리를 차단하지 않습니다. 이 모드는 여러 연결로 인해 메모리를 더 사용하지만 대개 속도가 더 빠릅니다. 기기가 API 16 이상이고 메모리 용량이 낮은 기기가 아니라면 Room에서 기본적으로 WAL을 사용합니다. 이 동작은 RoomDatabase.Builder에서 setJournalMode() 메서드를 사용하여 제어할 수 있습니다. b/67757002

  • Guava 지원: Room에서 이제 DAO 쿼리에서 Guava Optional<T> 또는 ListenableFuture<T> 반환을 지원합니다. ListenableFuture<T>를 사용하려면 Room(android.arch.persistence.room:guava:1.1.0-alpha2)에서 guava 아티팩트를 가져와야 합니다.

  • Room에서 이제 DAO 쿼리로부터 java.util.Optional<T> 반환을 지원합니다.

  • 기본 구현이 포함된 인터페이스 메서드가 이제 DAO 클래스의 @Transaction 메서드에서 지원됩니다. 이는 Java 8Kotlin 모두에 적용됩니다. b/72416735

버그 수정

  • 사용할 수 있는 다른 생성자가 있는 경우 @Relation이 있는 생성자가 컴파일 오류를 일으키지 않습니다. b/72884434

  • @Query 메서드에서 '로 이스케이프 처리된 테이블 이름이 이제 무효화 추적기에서 올바로 이스케이프 처리됩니다. b/72366965

  • Room에서 이제 주석을 처리하는 동안 Kotlin @Metadata 주석을 사용하여 클래스 구조를 읽습니다. 즉, pojo가 종속성에서 상속된 경우에도 생성자 매개변수 이름을 올바로 읽을 수 있습니다. b/67181813

  • 다운그레이드 마이그레이션 경로를 찾을 때 발생하는 문제가 해결되었습니다. b/72153525

  • 이제 기존 데이터베이스에서 Room으로 마이그레이션할 때 기본이 아닌 열 유형이 올바로 처리됩니다. b/71953987

  • Room에서 이제 Kotlin 클래스에서 지속되는 boolean? 필드를 올바로 처리합니다. b/72786402

2018년 1월 22일

Lifecycles 1.1.0, Room 1.1.0-alpha1, Paging 1.0.0-alpha5가 출시되었습니다.

Lifecycle 1.1.0

패키징 변경사항

이제 새롭고 훨씬 작은 종속성을 사용할 수 있습니다.

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

API 변경사항

  • 이제 지원이 중단된 LifecycleActivityLifecycleFragment삭제되었습니다. FragmentActivity, AppCompatActivity 또는 지원 Fragment를 사용하세요.
  • @NonNull 주석이 ViewModelProvidersViewModelStores에 추가되었습니다.
  • ViewModelProviders 생성자 지원이 중단되었습니다. 그 생성자의 정적 메서드를 직접 사용하세요.
  • ViewModelProviders.DefaultFactory의 지원이 중단되었습니다. ViewModelProvider.AndroidViewModelFactory를 사용하세요.AndroidViewModelFactory
  • ViewModelAndroidViewModel 인스턴스를 생성하는 데 적합한 정적 Factory를 가져오기 위해 정적 ViewModelProvider.AndroidViewModelFactory.getInstance(Application) 메서드가 추가되었습니다.

Room 1.1.0-alpha1

새로운 기능

  • RawQuery: 이 새로운 API를 사용하면 @Dao 메서드가 SQL을 쿼리 매개변수로 받을 수 있습니다. b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: RoomDatabase.Builder의 이 새로운 API를 사용하면 fallbackToDestructiveMigration과 비교하여 파괴적인 마이그레이션이 허용되는 스키마 버전부터 세밀하게 제어할 수 있습니다. b/64989640
  • Room에서는 이제 최신 Paging API(alpha-4+)만을 지원하고, 사용되지 않는 LivePagedListProvider의 지원을 중단합니다. 새로운 Room 알파를 사용하려면 페이징 alpha-4 이상을 사용하고, 아직 전환하지 않은 경우 LivePagedListProvider에서 LivePagedListBuilder로 전환해야 합니다.

버그 수정

  • Kotlin Kapt 유형의 지원이 향상되었습니다. b/69164099
  • 필드 순서가 더 이상 스키마를 무효화하지 않습니다. b/64290754

Paging 1.0.0-alpha5

버그 수정

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

2017년 12월 11일

Paging alpha4-1이 출시되었습니다. Paging 알파 4의 소규모 버그 수정 릴리스입니다.

버그 수정

  • 잘못된 데이터 소스의 콜백 매개변수를 확인하지 않습니다. b/70353706, b/70360195

2017년 12월 7일

Paging alpha4가 출시되었습니다. 이 릴리스에서는 대부분 네트워크 및 네트워크와 데이터베이스를 함께 사용하는 사례를 대상으로 한 중대한 변경사항과 추가 사항이 있습니다.

API 변경사항

  • DataSource는 이제 네트워크에서 직접 손쉽게 페이징하기 위한 비동기 API입니다.

    • 초기 크기와 데이터의 단일 진입점
    • 콜백을 보유했다가 나중에 전달하여 네트워크 재시도 지원
    • 스레드로부터 안전한 콜백으로 UI 스레드에 단일 네트워크 지원 PagedList 생성을 위한 비동기 로딩 허용
    • 초기 로드 매개변수와 관련된 더 명확한 오류 동작
  • TiledDataSource의 이름이 PositionalDataSource로 변경되어, 위치 기반 색인을 반영하고 자리표시자의 사용이 중지될 때 타일로 표시되지 않음을 나타냅니다.

  • 네트워크 페이지 로드에 삽입된 다음/이전 토큰을 지원하기 위해 PageKeyedDataSource가 추가되고, 차이를 명확히 하기 위해 KeyedDataSource의 이름이 ItemKeyedDataSource로 변경되었습니다.

  • LivePagedListBuilderDataSource.FactoryLivePagedListProvider로 대체되었습니다. 빌더는 맞춤설정을 강화하고 기본값을 단순화하여 같은 기능을 제공합니다. Factory를 사용하면 DataSource 생성 코드를 LiveData와 독립적으로 유지할 수 있습니다.

  • 데이터베이스와 네트워크를 함께 사용하는 사례에 PagedList.BoundaryCallback이 추가되었습니다.

  • PagedList.Builder 생성자가 DataSourcePagedList.Config를 함께 받아서, 이제 LivePagedListBuilder와 더욱 유사해졌으며, 자바 언어의 Diamond 연산자 또는 Kotlin의 추론 유형을 허용합니다.

  • PagedList.getConfig()가 추가되었으며, PagedList.Config에 이제 공개 멤버 속성이 있습니다.

  • KeyedDataSource.loadBefore()더 이상 결과가 취소될 것을 기대하지 않습니다.

  • PagedList가 표시되는 업데이트를 수신하기 위해 PagedListAdapter.onCurrentListChanged()가 추가되었습니다.

버그 수정

  • PagedListAdapter(도우미)의 IndexOutOfBoundsException이 수정되었습니다. b/67883658

1.0.0 - 2017년 11월 6일

모든 주요 구성요소(Paging 제외)가 이제 1.0.0입니다. 이 릴리스는 reactivestreams 라이브러리의 변경사항 1개를 제외하면 rc1과 정확히 동일합니다.

버그 수정

출시 후보 - 2017년 10월 18일

모든 주요 아티팩트(Paging 제외)가 이제 1.0.0-rc1입니다.

1.0.0 릴리스에 더 이상 알려진 문제나 새로운 기능 추가 일정이 없습니다. 프로젝트를 업그레이드하여 1.0.0-rc1을 사용하시면 Google에서 테스트하여 완벽한 1.0.0을 제공하는 데 도움이 됩니다.

동작 변경

  • 이 릴리스에서 Lifecycle.Event#ON_STOP은 이제 onSaveInstanceState가 호출되면 전달됩니다(이전에는 ON_STOP을 전달하지 않고 CREATED로 표시되기만 했음). 자세한 내용은 수명 주기 문서를 참조하세요.

버그 수정

  • Room

    • Room에서는 이제 컴파일하는 동안 최신 xerial 아티팩트를 사용하여 OutOfMemory 문제를 해결합니다. b/62473121
    • Query 메서드는 이제 @Transaction로 주석을 달 수 있습니다. 자세한 내용은 @Transaction 참조 문서를 참조하세요. b/65112315
    • Room에서 공개 API로 의도된 적이 없었던 StringUtil 클래스가 공개 API에서 삭제되었습니다.
  • Lifecycle

    • API 레벨 24미만에서 활동이 부분적으로 다뤄질 때 LiveData가 올바로 작동합니다. b/65665621

    • 상위 클래스의 OnLifecycleEvent 메서드가 이제 제대로 호출되고, 그러지 않은 경우 컴파일 중에 경고가 인쇄됩니다. b/63474615

    • Lifecycle이 이제 WeakReference를 다시 LifecycleOwner에게 유지하여, Lifecycle이 평소보다 오래 메모리에 남아 있는 경우 LifecycleOwner의 유출을 방지합니다. 이 동작은 예방조치에 불과하며 Lifecycle이 유출되지 않도록 주의해야 합니다.

2017년 10월 9일

Paging alpha-3이 출시되었습니다. 이 릴리스는 Lifecycle 및 Room의 beta 2 릴리스와 호환됩니다.

버그 수정

  • Paging 문서가 개선되었습니다.

2017년 10월 5일

모든 주요 아티팩트(Paging 제외)가 이제 beta 2입니다. 이 릴리스에서는 새로운 Paging 버전이 없습니다.

버그 수정

  • Lifecycle

    • LiveDataReactiveStreams는 이제 LiveData가 활성이 아닐 때 소스 게시자 구독을 올바로 취소합니다. b/62609183
    • 상위 클래스가 다른 모듈에서 제공될 때 Lifecycle 이벤트가 상위 클래스로 올바로 전파됩니다. b/63474615
    • 구독을 생성하는 동안 관찰자가 구독을 취소할 때 LiveData가 관찰자를 올바로 처리합니다. b/66337741
    • 이제 종속성 트리에서 자바 8 언어 아티팩트의 FullLifecycleObserver를 사용할 수 있습니다. b/66525578

    • Proguard의 경우 Proguard 파일에 다음 줄을 추가하세요 (1.0.0이 배송되면 이 작업이 필요하지 않음).

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Room

    • 반환된 Pojo에 쿼리 응답의 어떤 열에도 일치하지 않는 @NonNull 필드가 @Query 메서드에 있으면, 컴파일할 때 이제 Room에서 오류를 인쇄합니다. 필드가 @Nullable이면 Room에서 경고만 인쇄합니다. b/67115337
    • Room에서 이제 최신 OS 버전의 색인 유효성을 검사합니다. b/63132683
    • Pojo에 일치하는 생성자가 여러 개 있는 경우 Room에서 기본적으로 인수가 없는 생성자를 선택합니다. b/67353427
    • 단일 열 기본 키가 Integer 또는 Long인 경우 Nullable일 수 있습니다. b/67086876
    • 무효화 추적기가 테스트 모드에서 재입력을 올바로 처리합니다. b/65471397
    • 컴파일할 때 이제 Room에서 열과 테이블 이름에 잘못된 문자가 있는지 검사합니다(잘못된 문자: `, "). b/64749111

2017년 9월 21일

이 릴리스로 모든 아키텍처 구성요소 모듈이 beta 1 이상이 됩니다 (alpha 2인 새 페이징 라이브러리 제외).

Google에서는 더 이상 API를 변경할 계획이 없습니다. 예정에 없이 변경될 수 있지만, 1.0.0이 안정화되기 전에 API를 변경하는 기준이 매우 높으며 변경이 일어날 가능성이 거의 없습니다.

  • 1.0.0이 안정화되기 전에 LifecycleActivity 및 LifecycleFragment가 삭제됩니다. 지원 라이브러리 26.1.0 이상을 사용하는 경우 LifecycleActivity 및 LifecycleFragment가 필요하지 않습니다.

알파 단계와 달리 베타 단계는 매우 짧은 기간으로 예정되어 있습니다.

버전 변경사항

  • Lifecycle 확장 프로그램과 Room은 이제 beta 1입니다.
  • Paging은 이제 alpha 2입니다.
  • Lifecycle(런타임, 일반) 및 Arch Core(일반)에는 변경사항이 없습니다. 두 아티팩트 모두 9월 13일 이후 1.0.0 버전이 됩니다.

새로운 아티팩트

  • 이제 Lifecycle에 common-java8이라는 새로운 아티팩트가 있습니다. 이 아티팩트에는 모든 Lifecycle 메서드의 기본 구현이 있는 DefaultLifecycleObserver라는 새로운 인터페이스가 포함됩니다. 자바 8 언어를 사용하는 경우 주석보다는 이 아티팩트가 유용할 수 있습니다.

    • beta1의 버그로 인해 android.arch.lifecycle:common:1.0.1 모듈에 명시적인 종속성을 추가하여 새로운 common-java8 아티팩트를 사용해야 합니다. 이 문제는 beta2에서 해결될 예정입니다.

패키징 변경사항

  • android.arch.persistence.room.dbandroid.arch.persistence.db로 이동했습니다.
  • android.arch.persistence.room.db-impl은 이동되어 이름이 android.arch.persistence.db-framework로 변경되었습니다.

이 두 아티팩트는 이미 Room에 종속성이 있으므로, 이 아티팩트를 직접 사용하지 않는 한 빌드 파일에서 아무것도 변경할 필요가 없습니다.

API 변경사항

  • Room

    • @ColumnInfo 주석이 이제 열의 대조 설정을 지원합니다. b/62007004
    • transient 필드가 이제 @ColumnInfo, @Embedded 또는 @Relation으로 주석이 달리지 않는 한 이제 기본적으로 무시됩니다. b/62600692
    • 기본 키는 자동 생성되지 않는 한 @NonNull로 주석을 달아야 합니다. b/64292391
      • 이 변경에 따라 스키마 마이그레이션이 필요할 수 있습니다. 불편을 끼쳐 드려 죄송합니다.
    • DAO 메서드를 재정의하고 트랜잭션 내에서 실행되는 새로운 편의 주석(@Transaction)이 추가되었습니다.
  • SQLite 데이터베이스 지원

  • Paging

    • 예제와 스레드 주석 추가로 Paging 문서가 개선되었습니다.

버그 수정

  • Room
    • @Query 메서드의 Kotlin 다선형 문자열이 올바로 처리됩니다. b/65809374
  • Paging
    • Paging 아티팩트가 더 이상 junit에 의존하지 않습니다. b/65690261

1.0.0 Alpha 9-1 - 2017년 9월 13일

핵심 수명 주기 아티팩트(런타임, 일반) 및 Arch Core(일반)가 안정적인 버전 1.0.0이 되는 중요한 릴리스입니다.

이러한 변경과 함께 지원 라이브러리 26.1.0이 이제 이 라이브러리에 의존합니다. AppCompatActivity지원 프래그먼트에서 이제 LifecycleOwner 인터페이스를 구현합니다.

이 릴리스도 새 통합을 활용하기 위해 지원 라이브러리 26.1.0에 의존합니다.

새 라이브러리: Paging

이 릴리스에는 페이징이라는 새 라이브러리가 포함되어, 필요한 경우 대용량 데이터 세트를 분할하여 RecyclerView에 손쉽게 로드할 수 있습니다. 페이징alpha1로 출시되었으며 자체 릴리스 주기를 갖습니다.

API 변경사항

버그 수정

  • 앱의 클래스 경로에 주석이 있는 경우 이제 생성된 클래스에 @Generated로 주석이 달립니다. b/35754819

  • MediatorLiveData의 관찰자 비교 버그가 수정되었습니다. b/64413274

  • [LiveData]에서 이제 SQLite WITH 쿼리가 지원됩니다. [ref-LiveData] b/62510164

  • 테이블이 두 개 이상 관찰되는 경우 InvalidationTracker가 올바른 목록을 보내지 않는 버그가 수정되었습니다. b/65099281

  • Room이 Windows에서 다른 파일을 생성하는 버그가 수정되었습니다. b/64470691

  • 이제 루트 패키지에서 LifecycleObservers가 지원됩니다. b/62310817

1.0.0 Alpha 9 - 2017년 8월 16일

버그 수정

  • LiveData에서 첫 번째 관찰자가 onChanged 메서드에서 삭제되면 두 번째 관찰자가 무시되는 버그가 수정되었습니다. b/64285805

1.0.0 Alpha 8 - 2017년 8월 1일

동작 변경사항

  • 기본 유형의 열이나 NonNull로 주석이 달린 열에 NOT NULL 제약 조건이 추가되었습니다. 이로 인해 테이블의 구조가 변경되므로, 이미 아키텍처 구성요소 알파 7 이하를 사용 중인 경우 데이터를 유지하거나 빌더에서 fallbackToDestructiveMigration() 메서드를 사용하고 싶다면 마이그레이션을 구현해야 합니다. b/62007004

API 변경사항

1.0.0 Alpha 7 - 2017년 7월 26일

버그 수정

  • LifecycleRegistry removeObserver 메서드에서 LifecycleObserver 재추가를 중단시킨 심각한 버그가 수정되었습니다.

  • 맞춤 데이터베이스의 InvalidationTracker가 수정되었습니다. b/63162311

1.0.0 Alpha 6 - 2017년 7월 25일

동작 변경사항

  • LifecycleObserver의 호출 순서가 변경되었습니다. 이전에는 관찰자가 항상 추가 순서대로 호출되었습니다. 즉, observer1observer2보다 먼저 추가되면 observer2보다 먼저 ON_CREATE와 기타 모든 이벤트를 받습니다. 소멸 이벤트의 경우 추가된 역순으로 관찰자가 호출되기 때문에 소멸 이벤트에는 해당되지 않습니다. 따라서 현재 동작은 observer1observer2보다 먼저 추가되면 ON_CREATE가 먼저 observer1에 전송된 다음 observer2에 전송되지만(ON_STARTON_RESUME 경우도 동일), ON_PAUSE 이벤트는 먼저 observer2에 전송된 다음에만 observer1에 전송됩니다(ON_STOPON_DESTROY경우도 동일).

  • 마이그레이션이 없으면 Room에서 예외를 발생시킵니다. 이전에는 Room이 데이터베이스를 지우기만 했는데 이제는 비정상 종료됩니다. 개발자는 빌더 API를 호출하여 삭제 동작을 선택할 수 있습니다. b/63872392

API 변경사항

  • 마이그레이션이 없는 경우 데이터베이스를 지우기 위해 RoomDatabase.BuilderfallbackToDestructiveMigration() 메서드가 추가되었습니다. b/63872392

  • 아키텍처 구성요소가 이제 지원 라이브러리 26.0.0에 의존합니다.

버그 수정

  • @Embedded에 중첩된 @Relation 처리가 수정되었습니다. b/63736065

  • 기본 키가 자동 증가되는 테이블의 테스트 마이그레이션이 수정되었습니다. b/63393618

  • 이제 DELETE 또는 UPDATE 쿼리를 실행하는 @Queries에서 인수를 올바로 받습니다. b/63872538

  • 이제 소유자 프래그먼트가 백스택에 있고 구성 변경이 두 번 발생할 때 ViewModels가 보관됩니다. b/38445801

1.0.0 Alpha 5 - 2017년 7월 18일

API 변경사항

android.arch.persistence.room:rxjava2 아티팩트를 사용하여 Room에 RxJava 지원을 추가해야 합니다.

버그 수정

  • 매개변수가 없는 @Delete 쿼리가 수정되었습니다. b/63608092

  • getter와 setter의 Room 유형 검사가 수정되었습니다. b/63733651

1.0.0 Alpha 4 - 2017년 7월 11일

API 변경사항

  • RoomDatabase에 새로운 편의 메서드(runInTransaction())가 추가되었습니다.

  • @Insert, @Delete, @Update 메서드가 이제 다양한 엔티티 유형의 매개변수를 포함할 수 있습니다. b/62682405

버그 수정

  • @Dao 메서드의 byte[] 처리가 수정되었습니다. b/62460045

  • Room의 마이그레이션 검사에서 이제 대소문자를 구분하지 않는 비교를 사용합니다. b/62875382

  • Lifecycles 아티팩트의 Proguard 구성이 수정되었습니다. b/62113696

1.0.0 Alpha 3 - 2017년 6월 15일

API 변경사항

  • @OnLifecycleEvent가 이제 이벤트 매개변수를 1개만 지원합니다. 이는 향후 기본 메서드가 포함된 인터페이스로 마이그레이션할 수 있도록 자바 8 지원 준비를 위한 변경입니다. 이 변경과 관련하여 @OnLifecycleEvent(ON_ANY) 주석이 달린 메서드만 유형 Event의 두 번째 매개변수(첫 번째 매개변수는 LifecycleOwner임)를 받을 수 있습니다. 자세한 내용은 Lifecycle 문서를 참조하세요.

  • LifecycleActivityLifecycleFragment 클래스가 android.arch.lifecycle:extensions 아티팩트로 이동했습니다.

  • MigrationTestHelper는 테스트 애셋에서 스키마를 읽고 애플리케이션 컨텍스트에 데이터베이스를 만들 수 있도록 Context 대신 Instrumentation 인스턴스를 받습니다.

  • @DAO 메서드의 @Insert, @Delete, @Update 주석이 이제 매개변수 유형으로 Iterable를 포함할 수 있습니다. b/62259820

버그 수정

  • lifecycle 이벤트로 재정의된 메서드가 이제 더 이상 여러 번 호출되지 않습니다.

  • 여러 IN 매개변수가 이제 올바로 처리됩니다. b/62608681

  • 추상 DAO 클래스가 이제 @Database 인스턴스를 받는 생성자를 포함할 수 있습니다. b/38488747

  • DAO는 이제 유형 매개변수가 포함된 슈퍼클래스/슈퍼 인터페이스를 포함할 수 있습니다. b/62103620

1.0.0 Alpha 2 - 2017년 6월 2일

API 변경사항

버그 수정

  • 수명 주기의 Proguard 파일. (b/62113696)
  • 유형 변환기의 데이터 손실. (b/62100716)
  • @Insert 쿼리에서 Long[] 반환이 허용됩니다.

1.0.0 Alpha 1 - 2017년 5월 17일

MinSDK: 14

일반 권고 사항

  • 출시하기 전에 많은 테스트가 수행되었지만 현재 아키텍처 구성요소는 알파 상태입니다. 프로덕션 앱을 빌드하시는 경우 API가 1.0 출시에 앞서 변경될 예정이며 충분히 안정적이지 않을 수 있음을 유의하세요. 사용하는 라이브러리 문제의 디버깅이 불편하다면 아키텍처 구성요소를 먼저 사이트 프로젝트에서 사용해 보시기 바랍니다.

  • 오늘 모두 마이그레이션하는 것은 권장되지 않습니다. 아키텍처 구성요소 1.0을 출시할 때 마이그레이션 가이드가 준비될 예정입니다.

알려진 제한 및 문제