2019년 1월 15일
WorkManager
WorkManager 1.0.0-beta02
가 출시되었습니다. 이 출시에는 몇 가지 버그 수정이 포함되었습니다.
버그 수정
- Android 6.0(API 수준 23)을 실행하는 기기에서 주기적 작업이 구간별로 두 번 이상 실행되던 극단적인 사례가 수정되었습니다. b/121998363
- Android 5.1(API 수준 22) 이하를 실행하는 기기의
ConcurrentModificationException
이 수정되었습니다. b/121345393 - Android 5.1(API 수준 22) 이하를 실행하는 기기에서 제약 조건이 충족되지 않을 때 작업이 잘못 실행되는 문제가 수정되었습니다. b/122578012
- 일부 극단적인 사례에서 작업 완료 처리가 더 빨라지도록 최적화했습니다. b/122358129
- WorkManager에서 사용하는
LiveData
의 여러 인스턴스 간 잠재적 경합 상태를 해결하기 위한 변경사항이 추가되었습니다. 1.1.1-rc01
대신Room
종속 항목1.1.1
을 사용하도록 이동했습니다. 이 두 버전은 동일합니다. b/122578011
2018년 12월 19일
WorkManager
WorkManager 1.0.0-beta01
이 출시되었습니다. 이 출시에는 API 변경사항이 없습니다. 앞으로 심각한 문제만 없다면 다음 버전까지 WorkManager가 API를 안정적으로 유지할 것으로 예상됩니다. 이 버전에는 몇 가지 버그 수정이 포함되어 있습니다.
버그 수정
- 성공적으로 완료된 상위 작업의 이전에 취소된 하위 작업이 더 이상 실행되지 않습니다. b/120811767
- 로깅 클래스가 올바르게 초기화되었습니다(주로 테스트 중에 표시됨).
2018년 12월 18일
Navigation
Navigation 1.0.0-alpha09
이 출시되었습니다. 이 출시에는 API에 관한 브레이킹 체인지가 포함되어 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
android.arch.navigation:navigation-testing
아티팩트의 개발을 계속하지 않기로 결정했습니다. NavController
의 내부 테스트에는 도움이 되는 것으로 입증되었지만, navigate()
가 올바르게 호출되고 있는지 확인하기 위해 모의 NavController
인스턴스를 만드는 것과 같은 대체 테스트 전략을 사용할 것을 권장합니다. 이 방법은 AndroidDevSummit 2018의 단일 활동 소개에서 자세히 논의되었으며 Google에서는 Navigation을 통한 테스트와 관련된 추가 문서를 제작하고 있습니다.
새로운 기능
menuCategory="secondary"
가 포함된MenuItem
이NavigationUI
메서드와 함께 사용될 때 더 이상 백 스택을 표시하지 않습니다. (b/120104424)- 이제
AppBarConfiguration
을 사용하여navController.navigateUp()
에서false
를 반환할 때 호출되는 대체OnNavigateUpListener
인스턴스를 설정할 수 있습니다. b/79993862 b/120690961
브레이킹 체인지
argType="reference"
인<argument>
를 사용할 때 Navigation에서 더 이상 참조를 파싱하지 않는 대신 원시 리소스 ID 자체를 제공합니다. b/111736515onNavDestinationSelected()
가 이제 기본적으로 탐색 그래프의 시작 대상으로 돌아가서setup
메서드와 일치하도록 만듭니다.MenuItem
에menuCategory="secondary"
를 추가하여 백 스택이 표시되지 않도록 합니다. aosp/852869- 생성된
Args
클래스의fromBundle()
메서드가 이제 null이 허용되는Bundle
대신 null이 아닌Bundle
을 사용합니다. aosp/845616
버그 수정
- 이제 인수가 항상 문자열로 파싱되지 않고 딥 링크에서 올바른
argType
으로 파싱됩니다. b/110273284 - Navigation에서 이제 공개 리소스를 올바르게 내보냅니다. b/121059552
- 이제 Safe Args가 Android Gradle 플러그인 3.4 카나리아 4 이상과 호환됩니다. b/119662045
2018년 12월 12일
WorkManager
WorkManager 1.0.0-alpha13
이 출시되었습니다. 이 출시에는 일부 Kotlin 사용자에게 도움이 되는 소규모 API 변경사항이 포함되어 있습니다.
API 변경사항
androidx.work.Result
가ListenableWorker
의 내부 클래스가 되도록 이동되었습니다. 이에 따라 Kotlin의 최상위Result
클래스와 리팩터링 충돌이 발생하지 않습니다. API에 관한 브레이킹 체인지입니다. b/120564418
API에 관한 브레이킹 체인지
androidx.work.Result
가ListenableWorker
의 내부 클래스가 되도록 이동했습니다.
2018년 12월 6일
Paging
Paging 2.1.0-rc01
이 2.1.0-beta01
에서 변경사항 없이 출시되었습니다.
Navigation
Navigation 1.0.0-alpha08
이 출시되었습니다. 이 출시에는 API에 관한 브레이킹 체인지가 포함되어 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
새로운 기능
- 이제
NavigationUI
메서드와 함께 사용하면 대상 라벨이android:label
의{argName}
인스턴스를 올바른 인수로 자동 대체합니다. b/80267266 - Navigation에서 이제 지원 라이브러리 28.0.0을 사용합니다. b/120293333
브레이킹 체인지
OnNavigatedListener
에서OnDestinationChangedListener
로 이름이 변경되었습니다. b/118670572OnDestinationChangedListener
에서 이제 인수의Bundle
도 전달합니다. aosp/837142app:clearTask
,app:launchDocument
속성 및 관련 메서드가 삭제되었습니다. 그래프의 루트와 함께app:popUpTo
를 사용하여 백 스택의 모든 대상을 삭제합니다. b/119628354ActivityNavigator.Extras
가 이제Builder
패턴을 사용하며 임의의Intent.FLAG_ACTIVITY_
플래그를 설정하는 기능을 추가합니다. aosp/828140NavController.onHandleDeepLink
에서handleDeepLink
로 이름이 변경되었습니다. aosp/836063NavOptions
,NavInflater
,NavDeepLinkBuilder
,AppBarConfiguration
과 같이 서브클래스 목적이 아닌 여러 클래스와 메서드가final
로 설정되었습니다. aosp/835681- 지원 중단된
NavHostFragment.setGraph()
메서드가 삭제되었습니다. aosp/835684 - 지원 중단된
NavigationUI.navigateUp(DrawerLayout, NavController)
메서드가 삭제되었습니다. aosp/835684 - Fragment 생성이
FragmentNavigator
로 이동하여 더욱 간편하게FragmentFactory
에 Fragment 생성을 위임할 수 있습니다. b/119054429 NavGraphNavigator
생성자가 더 이상Context
를 가져오지 않습니다. aosp/835340- NavigatorProvider는 이제 인터페이스가 아닌 클래스입니다.
getNavigatorProvider()
에서 반환되는NavigatorProvider
의 기능은 변경되지 않았습니다. aosp/830660 NavDestination.navigate()
를 삭제했습니다. 대신Navigator
에서navigate()
를 호출하세요. (aosp/830663)Navigator
를 대규모로 리팩터링하고OnNavigatorNavigatedListener
의 필요성을 제거했으며 대신navigate
가 이전에 이동했던NavDestination
을 반환합니다.Navigator
인스턴스에서 더 이상 열기 이벤트를NavController
에 전송할 수 없습니다.OnBackPressedCallback
을 사용하여 뒤로 버튼 누르기를 가로채고navController.popBackStack()
을 호출하는 방법을 고려해 보세요. (aosp/833716)
버그 수정
- 이제 대상이
<navigation>
요소인 경우popUpTo
가 일관되게 작동합니다. (b/116831650) - 중첩된 그래프를 사용할 때
IllegalArgumentException
을 유발하는 여러 버그를 수정했습니다. (b/118713731, b/113611083, b/113346925, b/113305559) - 이제
<activity>
대상의dataPattern
속성이toString()
을 호출하여 문자열이 아닌 인수를 채웁니다. (b/120161365)
Safe Args
- Safe Args는 Enum 값을 포함하여 직렬화 가능한 객체를 지원합니다. Enum 유형은 클래스 이름 없이 enum 리터럴을 사용하여 기본값을 설정할 수 있습니다(예:
app:defaultValue="READ"
). (b/111316353) - Safe Args는 지원되는 모든 유형의 배열을 지원합니다. b/111487504
- Safe Args는 이제 리소스 디렉터리의 하위 폴더를 무시합니다. b/117893516
- Safe Args는 적절한 위치에
@Override
주석을 추가합니다. b/117145301
2018년 12월 5일
WorkManager
WorkManager 1.0.0-alpha12
가 출시되었습니다. 이 출시에는 일부 API에 관한 브레이킹 체인지가 있습니다. 아래 API에 관한 브레이킹 체인지 섹션을 참조하세요. 이 버전은 첫 번째 베타 버전으로 출시될 가능성이 높습니다. 또한 alpha12
에는 광범위한 문서 업데이트도 포함되어 있습니다.
API 변경사항
- 새 아티팩트
work-rxjava2
에는RxWorker
가 도입됩니다.Single<Payload>
가 필요한ListenableWorker
입니다. - 지원 중단이 임박한 관계로 Firebase JobDispatcher 지원이 삭제되었습니다. 따라서 베타 버전이 시작되면
work-firebase
아티팩트가 더 이상 업데이트되지 않습니다. 향후 대체 방안을 추가할 계획입니다. Payload
가Result
에 결합되었습니다.Result
는 이제 세 가지 구체적인 구현이 포함된 '봉인된 클래스'이며Result.success()
(또는Result.success(Data)
),Result.failure()
(또는Result.failure(Data)
) 및Result.retry()
를 통해 얻을 수 있습니다.ListenableFuture
는 이제Payload
대신Result
가 됩니다.Worker
에는 출력Data
의 getter 및 setter 메서드가 없습니다. 브레이킹 체인지입니다.- 느리게 트리거하는 콘텐츠 URI를 더 잘 지원하기 위해
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
,Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
및 변형이 추가되었습니다. b/119919774 WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
변형이 추가되었습니다. 이 메서드에는 API 26이 필요합니다.Operation.await()
및ListenableFuture.await()
Kotlin 확장 메서드가 추가되었습니다.Operation.getException()
에서Operation.getThrowable()
로 이름이 변경되었습니다. 브레이킹 체인지입니다.ContentUriTriggers
클래스와 이 클래스를 참조하는 메서드는 더 이상 공용으로 사용할 수 없습니다. 브레이킹 체인지입니다.- API 간소화를 위해
WorkManager
,WorkContinuation
및OneTimeWorkRequest
의 나머지 varargs 메서드가 삭제되었습니다. 빌드 문제를 수정하려면 기존 varargs를Arrays.asList(...)
로 래핑하면 됩니다. 여전히 각 메서드의 단일 인수 버전이 포함됩니다. 브레이킹 체인지입니다. WorkContinuation.combine(OneTimeWorkRequest, *)
변형이 삭제되었습니다. 이러한 변형은 혼란을 야기하는 API를 제공했으며 기존의combine
메서드가 더 이해하기 쉽습니다. 브레이킹 체인지입니다.
버그 수정
- 이미 실행 중인 작업의 프로세스 중단을 복구하는 데 있어 이제 Marshmallow 이전 구현을 더욱 신뢰할 수 있습니다.
observeForever
를 통해 관찰되는LiveData
가 WorkManager를 통해 추적됩니다. Room 라이브러리 수정의 백포트입니다. b/74477406을 참조하세요.- 이제 직렬화된 객체가 최대 크기를 초과하면
Data.Builder.build()
에서 예외가 발생합니다. 이전에는 백그라운드 스레드에서만 발생하여 적절하게 처리할 수 없었습니다. - 중지된 작업과 취소된 작업이 더 명확하게 구별됩니다.
getWorkInfoById()
는ListenableWorker.onStopped()
과정에서CANCELLED
State
의WorkInfo
를 반환합니다. ListenableWorker
에서null
Result
가 실패로 처리됩니다. b/120362353- API 24를 실행 중인 Shield 태블릿에서
IllegalArgumentException
이 가끔 발생하는 문제가 추론에 따라 수정되었습니다. b/119484416
API에 관한 브레이킹 체인지
- 지원 중단이 임박한 관계로 Firebase JobDispatcher 지원이 삭제되었습니다. 따라서 베타 버전이 시작되면
work-firebase
아티팩트가 더 이상 업데이트되지 않습니다. 향후 대체 방안을 추가할 계획입니다. Payload
가Result
에 결합되었습니다.Result
는 이제 세 가지 구체적인 구현이 포함된 '봉인된 클래스'이며Result.success()
(또는Result.success(Data)
),Result.failure()
(또는Result.failure(Data)
) 및Result.retry()
를 통해 얻을 수 있습니다.ListenableFuture
는 이제Payload
대신Result
가 됩니다.Worker
에는 출력Data
의 getter 및 setter 메서드가 없습니다.Operation.await()
및ListenableFuture.await()
Kotlin 확장 메서드가 추가되었습니다.Operation.getException()
에서Operation.getThrowable()
로 이름이 변경되었습니다.ContentUriTriggers
클래스와 이 클래스를 참조하는 메서드는 더 이상 공용으로 사용할 수 없습니다.- API 간소화를 위해
WorkManager
,WorkContinuation
및OneTimeWorkRequest
의 나머지 varargs 메서드가 삭제되었습니다. 빌드 문제를 수정하려면 기존 varargs를Arrays.asList(...)
로 래핑하면 됩니다. 여전히 각 메서드의 단일 인수 버전이 포함됩니다. WorkContinuation.combine(OneTimeWorkRequest, *)
변형이 삭제되었습니다. 이러한 변형은 혼란을 야기하는 API를 제공했으며 기존의combine
메서드가 더 이해하기 쉽습니다.
2018년 12월 4일
Room
Room 2.1.0-alpha03
이 출시되었습니다. 코루틴 지원이 추가되고 일부 버그가 수정되었습니다.
API 변경사항
@Fts3
/@Fts4
의 FTStokenizer
가 이제 Enum 대신 문자열을 취합니다. 이렇게 하면 Room에서 맞춤 tokenizer를 사용할 수 있습니다. 내장된 tokenizer는 여전히FtsOptions
에서 문자열 상수로 정의됩니다. (b/119234881 참조)
새로운 기능
- 코루틴: DAO 메서드는 현재 정지된 기능일 수 있습니다. Room에서 정지 함수를 지원하기 위해 새로운 아티팩트인
room-coroutines
가 출시되었습니다. b/69474692 @Insert
,@Delete
또는@Update
로 주석 처리된 DAO 메서드는 이제ListenableFuture
를 반환 유형으로 지원합니다. (b/119418331)
버그 수정
- Room에서
@Entity
의ignoredColumns
속성에 있는 열이 포함된 생성자를 제대로 찾지 못하는 버그를 수정했습니다. b/119830714 - Room이 DAO 메서드 매개변수의 생성된 구현에서 DAO 메서드 매개변수를 최종으로 표시하지 않는 버그가 수정되었습니다. b/118015483
- 특수 기호가 있는 쿼리에서 오류를 보고할 때 Room의 프로세서가 다운되는 버그가 수정되었습니다. b/119520136
- Room에서 기타 다양한
Collection
구현을IN
표현식의 인수로 거부하는 버그를 수정했습니다. b/119884035 - 지속적으로 관찰할 경우 Room에서 반환된 LiveData가 가비지를 수집하여 더 이상 새 데이터를 생산하지 않게 하는 버그가 수정되었습니다. b/74477406
- 잠금 경합을 줄이기 위해
RoomDatabase
의 닫기 잠금을 업데이트했습니다. b/117900450
2018년 11월 8일
WorkManager
WorkManager 1.0.0-alpha11
이 출시되었습니다. 이 출시에는 beta
에서 안정적인 API로 작동하는 데 필요한 여러 변경사항이 있습니다.
이 출시에는 API에 관한 브레이킹 체인지가 포함됩니다. 아래의 API에 관한 브레이킹 체인지 섹션을 참조하세요.
API 변경사항
work-runtime-ktx
에는 새로운CoroutineWorker
가 도입됩니다.WorkStatus
의 이름이WorkInfo
로 변경되었습니다. 관련된getStatus
메서드 변형의 이름이 모두 상응하는getWorkInfo
변형으로 변경되었습니다. 브레이킹 체인지입니다.ListenableWorker.onStopped()
는WorkRequest
가 취소되었는지 여부를 나타내는 부울 인수를 더 이상 허용하지 않습니다.WorkManager
에서는 더 이상 취소 여부를 구별하지 않습니다. 브레이킹 체인지입니다.androidx.work.test
패키지에서androidx.work.testing
패키지로 이름이 변경되었습니다. 브레이킹 체인지입니다.Constraints
의 setter가 더 이상 공개 API의 일부가 아닙니다. 브레이킹 체인지입니다.WorkerParameters.getTriggeredContentUris()
및WorkerParameters.getTriggeredContentAuthorities()
는 이전에 배열을 반환했습니다. 이제 이러한 메서드에서 컬렉션을 반환합니다. 브레이킹 체인지입니다.ListenableWorker.onStartWork()
에서ListenableWorker.startWork()
로 이름이 변경되었습니다. 브레이킹 체인지입니다.WorkStatus
의 생성자가 더 이상 공개 API의 일부가 아닙니다. 브레이킹 체인지입니다.Configuration.getMaxJobSchedulerID()
및Configuration.getMinJobSchedulerID()
에서 각각Configuration.getMinJobSchedulerId()
및Configuration.getMaxJobSchedulerId()
로 이름이 변경되었습니다. 브레이킹 체인지입니다.- API의 인체공학을 개선하기 위해 공개 API에 다수의
@NonNull
주석이 추가되었습니다. WorkManager.enqueueUniqueWork()
API를 추가하여WorkContinuation
을 생성하지 않고도 고유한OneTimeWorkRequest
를 대기열에 추가할 수 있게 했습니다.- 이제
WorkManager
의enqueue
및cancel
메서드 변형은 모두 새로운Operation
유형을 반환합니다. 브레이킹 체인지입니다. enqueue
변형은 모두 더 이상WorkRequest
의 varargs를 허용하지 않습니다. 브레이킹 체인지입니다. 대신 컬렉션을 사용하세요.Arrays.asList()
를 사용하여 기존 코드를 수정할 수 있습니다. API 공개 부분과 메서드 수를 줄이려는 조치입니다.- 이제 프로세스당 두 번 이상
initialize
WorkManager
를 시도하면IllegalStateException
이 발생합니다. 브레이킹 체인지입니다.
버그 수정
work-runtime-ktx
아티팩트의WorkRequest.Builder
는 이제ListenableWorker
를 사용합니다. b/117666259 문제가 해결되었습니다.PeriodicWork
의 다음 런타임이 미래로 설정됩니다. b/118204399 문제가 해결되었습니다.- 앱 시작에 WorkManager를 사용할 때의 잠재 디스크 I/O를 제거했습니다. b/117796731 문제가 해결되었습니다.
WorkConstraintsTracker
의 경합 상태가 수정되었습니다. 수정사항이며 android-workmanager/issues/56을 참고하세요.
API에 관한 브레이킹 체인지
WorkStatus
의 이름이WorkInfo
로 변경되었습니다. 관련된getStatus
메서드 변형의 이름이 모두 상응하는getWorkInfo
변형으로 변경되었습니다.ListenableWorker.onStopped()
는WorkRequest
가 취소되었는지 여부를 나타내는 부울 인수를 더 이상 허용하지 않습니다.WorkManager
에서는 더 이상 취소 여부를 구별하지 않습니다.androidx.work.test
패키지에서androidx.work.testing
패키지로 이름이 변경되었습니다.Constraints
의 setter가 더 이상 공개 API의 일부가 아닙니다.WorkerParameters.getTriggeredContentUris()
및WorkerParameters.getTriggeredContentAuthorities()
는 이전에 배열을 반환했습니다. 이제 이러한 메서드에서 컬렉션을 반환합니다.ListenableWorker.onStartWork()
에서ListenableWorker.startWork()
로 이름이 변경되었습니다.WorkStatus
의 생성자가 더 이상 공개 API의 일부가 아닙니다.Configuration.getMaxJobSchedulerID()
및Configuration.getMinJobSchedulerID()
에서 각각Configuration.getMinJobSchedulerId()
및Configuration.getMaxJobSchedulerId()
로 이름이 변경되었습니다.- 이제
WorkManager
의enqueue
및cancel
메서드 변형은 모두 새로운Operation
유형을 반환합니다. enqueue
변형은 모두 더 이상WorkRequest
의 varargs를 허용하지 않습니다.- 이제 프로세스당 두 번 이상
initialize
WorkManager
를 시도하면IllegalStateException
이 발생합니다.
2018년 11월 1일
Paging
Paging 2.1.0-beta01
이 2.1.0-alpha01
에서 변경사항 없이 출시되었습니다.
2018년 10월 30일
Room
Room 2.1.0-alpha02
가 출시되었습니다. 일부 버그가 수정되고 새로운 기능이 추가되었습니다.
새로운 기능
@Relation
에서@DatabaseView
참조 지원을 추가했습니다. (b/117680932)
버그 수정
- Rx 반환 유형에서 구독 및 배치할 때 Room이 기본 스레드에서 디스크 I/O를 수행하는 버그가 수정되었습니다. b/117201279
- Room이 Kotlin 엔티티 클래스에서 필드에 적절한 유형 변환기를 찾지 못하는 버그가 수정되었습니다. b/111404868
- Room에서 인수가 없는 Kotlin 기본 메서드가 포함된
DAO
인터페이스 구현에 잘못된 코드를 생성하는 버그가 수정되었습니다. (b/117527454) - Room의 SQLite 문법 파서가 업데이트되었으며 빌드 시간이 오래 걸리는 성능 문제가 수정되었습니다. b/117401230
2018년 10월 29일
Navigation
Navigation 1.0.0-alpha07
이 출시되었습니다. 이 출시에서는 버그가 수정되고 API가 변경되었습니다.
새로운 기능
- 새로운 AppBarConfiguration 클래스를 사용하여 최상위 대상으로 고려할 대상을 맞춤설정할 수 있습니다. 자세한 내용은 업데이트된 문서를 참고하세요. b/117333663
- 이제 그래프의 시작 대상으로 인수를 전달할 수 있습니다. b/110300470
- 이제 딥 링크에서 마침표, 하이픈, 더하기 기호가 있는 맞춤 체계를 지원합니다. b/112806402
브레이킹 체인지
navigation-testing-ktx
모듈이navigation-testing artifact
에 포함되었으며 더 이상 게시되지 않습니다.navigation-testing
아티팩트가 이제 Kotlin 표준 라이브러리 종속 항목을 갖습니다. API가 Kotlin 규칙과 더욱 일관성 있게 변경되었지만 계속해서 자바로 작성된 테스트에 사용할 수 있습니다.- 메타데이터 매니페스트 등록 탐색 그래프가 더 이상 지원되지 않습니다. b/118355937
- 작업이 더 이상 <activity> 대상에 연결되지 않습니다. (aosp/785539)
버그 수정
- 이제 딥 링크가 쿼리 매개변수를 올바르게 파싱합니다. b/110057514
- 이제 Activity 대상이 모든 시작 및 종료 애니메이션을 올바르게 적용합니다. b/117145284
- 맞춤 Navigator를 사용할 때 구성을 변경한 이후에 발생하는 비정상 종료 문제가 수정되었습니다. b/110763345
Safe Args
- Safe args가 이제 Android Gradle 플러그인 3.2.1에 고정된 종속 항목을 갖습니다. b/113167627
- 이제 내부 클래스의 Direction을 생성할 수 있습니다. b/117407555
- <include> 그래프에 Direction을 생성하는 문제가 수정되었습니다. b/116542123
2018년 10월 12일
Paging
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)
2018년 10월 11일
WorkManager
WorkManager 1.0.0-alpha10
이 출시되었으며 개발자가 제어하는 비동기 작업이 지원됩니다. 이 출시에는 API에 관한 브레이킹 체인지가 포함됩니다. 아래의 API에 관한 브레이킹 체인지 섹션을 참조하세요.
WorkManager가 알파 기간의 최종 단계에 진입하게 되며 베타에서는 API가 안정적일 것으로 예상되므로 Issue Tracker에서 의견을 보내 주시기 바랍니다.
API 변경사항
- 기본
Worker
생성자를 비롯하여 이전의deprecated
메서드 및 클래스가 모두 삭제되었습니다. API에 관한 브레이킹 체인지입니다. NonBlockingWorker
에서ListenableWorker
로 이름이 변경되었습니다. 이제 숨겨지지 않은 공개 클래스이며 사용 가능합니다.ListenableWorker
는 기본 스레드에서 호출되는 하나의 추상 메서드ListenableFuture<Payload> onStartWork()
의 액세스를 제공합니다. 개발자의 의지에 따라 비동기식으로 작업을 시작하고 처리할 수 있습니다. 작업이 완료되면ListenableFuture
를 적절하게 업데이트해야 합니다.ListenableFuture
의 참조 구현은alpha02
의Futures
패키지에서 제공됩니다. 아래의WorkManager
섹션을 참조하세요.Worker
는ListenableWorker
를 확장하고 추상Result doWork()
메서드를 사용하여 여전히 이전과 같이 작동합니다.Worker
의 일부 메서드 및 멤버가ListenableWorker
로 셔플되었습니다.- 곧 Kotlin 코루틴(안정적인 버전이 출시되면) 및 RxJava2를 사용하는
ListenableWorker
의 참조 구현이 제공됩니다.
- 인터페이스
WorkerFactory
및 구체적인 구현DefaultWorkerFactory
가WorkerFactory
라는 추상 클래스로 병합되었습니다. 이 구현은 사용자가 생성한WorkerFactory
인스턴스를 위한 마지막 노력으로 기본 반영 기반 동작이 호출되도록 합니다. 브레이킹 체인지입니다. WorkManager.synchronous()
,WorkContinuation.synchronous()
및 모든 관련 메서드가 삭제되었습니다. API에서 여러 메서드의 반환 유형으로ListenableFuture<Void>
가 추가되었습니다. API에 관한 브레이킹 체인지입니다.- 이제
ListenableFuture
를 사용하여 동기식으로 가져오고 관찰할 수 있습니다. 예를 들어WorkManager.enqueue()
는 이전에는void
를 반환했지만 지금은ListenableFuture<Void>
를 반환합니다. 작업이 완료되면ListenableFuture.addListener(Runnable, Executor)
또는ListenableFuture.get()
을 호출하여 코드를 실행할 수 있습니다. - 이러한
ListenableFuture
는 작업의 성공 또는 실패 여부가 아닌 작업의 완료만 알려줍니다. 이 정보를 확인하려면 WorkManager 메서드를 연결해야 합니다. - 이러한 객체의
cancel()
호출은 혼란을 야기하고 추론이 어렵기 때문에 무시됩니다(작업을 취소하는 건지 결과를 취소하는 건지 알기 어려움). 이 내용은Future
계약 내에 있습니다. - 동기식
getStatus*
메서드와의 동등함을 유지하기 위해ListenableFuture
변형을 제공하고LiveData
를 반환한 기존 메서드의 이름을 변경하여 이름의 일부에 'LiveData'를 명시적으로 포함하도록 했습니다(예:getStatusesByIdLiveData(UUID)
). API에 관한 브레이킹 체인지입니다.
- 이제
버그 수정
- 중복
androidx-annotations.pro
파일과 관련하여 alpha09의 알려진 문제가 해결되었습니다. gradle 파일에서exclude 'META-INF/proguard/androidx-annotations.pro'
를 삭제하여 이전 출시 노트의 해결방법을 삭제할 수 있습니다. - 새로운
Worker
생성자를 유지하도록 proguard 구성이 추가되었습니다. b/116296569 - 작업이
REPLACE
된 경합 상태의 잠재적NullPointerException
이 수정되었습니다. b/116253486, b/116677275 - 이제
WorkContinuation.combine()
에서 둘 이상이 아닌 하나 이상의WorkContinuation
이 허용됩니다. b/117266752
API에 관한 브레이킹 체인지
- 기본
Worker
생성자를 비롯하여 이전의deprecated
메서드 및 클래스가 모두 삭제되었습니다. - 인터페이스
WorkerFactory
및 구체적인 구현DefaultWorkerFactory
가WorkerFactory
라는 추상 클래스로 병합되었습니다. WorkManager.synchronous()
및WorkContinuation.synchronous()
가 삭제되었습니다.- 이제
WorkManager.getStatus*()
메서드는ListenableFuture
를 반환하고WorkManager.getStatus*LiveData()
는LiveData
를 반환합니다.
Futures
Futures 1.0.0-alpha02
가 출시되었습니다.
API 변경사항
- 개발자는 이제
ListenableFuture
의 가벼운 구체적인 구현으로ResolvableFuture
와AbstractResolvableFuture
를 사용할 수 있습니다.
2018년 10월 8일
Room
Room 2.1.0-alpha01
이 출시되었습니다.
새로운 기능
- FTS: 이제 Room에서 매핑 FTS3 또는 FTS4 테이블이 있는 항목을 지원합니다. 이제
@Entity
로 주석 처리된 클래스에@Fts3
또는@Fts4
주석을 추가하여 매핑 전체 텍스트 검색 테이블이 있는 클래스를 선언할 수 있습니다. 추가 맞춤설정을 위한 FTS 옵션은 주석의 메서드를 통해 사용할 수 있습니다. b/62356416 - View: 이제 Room에서 @DatabaseView 주석을 사용하여 저장된 쿼리로 클래스(view라고도 함)를 선언할 수 있습니다. (b/67033276)
- Auto Value: 이제 Room에서 AutoValue 주석이 달린 클래스를 항목과 POJO로 선언할 수 있습니다. 이제 auto value로 주석 처리된 클래스의 추상 메서드에서 Room 주석
@PrimaryKey
,@ColumnInfo
,@Embedded
,@Relation
을 선언할 수 있습니다. 이러한 주석을@CopyAnnotations
와 함께 제공해야 Room에서 제대로 이해할 수 있습니다. (b/62408420) - 추가 Rx 반환 유형 지원:
@Insert
,@Delete
,@Update
로 주석 처리된 DAO 메서드가 이제Completable
,Single<T>
및Maybe<T>
Rx 반환 유형을 지원합니다. (b/63317956) @Relation
이 포함된 변경할 수 없는 유형: 이전에는 Room에서@Relation
주석이 달린 필드를 설정할 수 있어야 했지만 지금은 생성자 매개변수로 허용됩니다.enableMultiInstanceInvalidation
:RoomDatabase.Builder
의 새 API로, 동일한 데이터베이스 파일을 사용하는 여러 RoomDatabase 인스턴스에서 무효화를 사용 설정합니다. 이 다중 인스턴스 무효화 메커니즘은 여러 프로세스에 걸쳐 작동합니다. (b/62334005)fallbackToDestructiveMigrationOnDowngrade
:RoomDatabase.Builder
의 새 API로, 다운그레이드가 발생하면 자동으로 데이터베이스를 재생성합니다. b/110416954ignoredColumns
: 무시된 필드를 이름별로 나열하는 데 사용할 수 있는@Entity
주석의 새 API입니다. 항목의 상속된 필드를 무시할 때 유용합니다. (b/63522075)
API/동작 변경사항
RoomDatabase
의mCallback
및mDatabase
가 이제@Deprecated
상태가 되었으며 Room의 다음 메이저 버전에서 삭제될 예정입니다. (b/76109329)
버그 수정
- Room에서 초기화 중에 손상된 데이터베이스 또는 잘못된 이전으로부터 제대로 복구하지 못하는 두 가지 문제를 해결했습니다. (b/111504749, b/111519144)
- 이제 Room에서 필드를
vars
로 선언할 필요가 없도록 데이터 클래스에서 Kotlin의 기본 생성자를 적절히 사용합니다. b/105769985
2018년 10월 1일
Room 2.0.0
이 2.0.0-rc01
에서 변경사항 없이 출시되었습니다.
Paging 2.0.0
이 출시되었으며 버그 1개가 수정되었습니다.
Paging
버그 수정
PositionalDataSource
및 자리표시자를 사용하여 매우 빠르게 스크롤할 때 발생할 수 있는 비정상 종료 문제를 해결했습니다. b/114635383
2018년 9월 21일
Lifecycle 2.0.0
이 출시되었으며 2.0.0-rc01
에서 ViewModel의 버그가 1개 수정되었습니다.
Lifecycle
버그 수정
- 생성자를 잘못 삭제하는 ViewModel proguard 규칙이 수정되었습니다. b/112230489
2018년 9월 20일
Navigation
Navigation 1.0.0-alpha06
이 출시되었습니다. 이 출시에서는 버그가 수정되고 API가 변경되었습니다.
새로운 기능
- 이제 Fragment 및 Activity 대상의 공유된 요소 전환이 지원됩니다. b/79665225. 자세한 내용은 탐색 아키텍처 구성요소를 통한 탐색 구현을 참고하세요.
NavigationView
의 항목을 선택하면 포함된 모든 하단 시트가 닫힙니다. b/112158843
API 변경사항
- 브레이킹 체인지: Navigator
navigate()
메서드가 이제Navigator.Extras
매개변수를 취합니다. - NavController의
getGraph()
메서드가 이제NonNull
입니다. b/112243286
버그 수정
- 개별 대상의 뷰와 함께 사용되는 경우 더 이상
NavigationUI.setupWithNavController()
에서 뷰를 누출하지 않습니다. b/111961977 - Navigator
onSaveState()
가 이제 한 번만 호출됩니다. b/112627079
Safe Args
- 탐색 대상 Direction 클래스에 상위 Direction 클래스가 있는 경우 이를 확장합니다. (b/79871405)
- Directions 및 Args 클래스가 이제 유용하게
toString()
을 구현합니다. b/111843389
2018년 9월 19일
WorkManager
WorkManager 1.0.0-alpha09
가 출시되었습니다. 이 출시에서는 버그가 수정되고 인프라가 업데이트되었으며 API가 변경되었습니다.
알려진 문제
'OS 독립 경로 'META-INF/proguard/androidx-annotations.pro'에서 파일이 두 개 이상 발견됨' 문제가 발생한 경우 alpha10에서 문제를 해결하는 동안 임시방편으로 gradle 파일에 아래 코드를 삽입하세요.
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
버그 수정
- '100 작업' 오류에 필요했던 다른 수정사항이 추가되었습니다. b/115560696
- 경합 상태로 인한 외래 키 제한 오류의 일부 수정사항이 추가되었습니다. b/114705286
ConstraintTrackingWorker.onStopped(boolean)
호출을 기본Worker
에 위임했습니다. b/114125093- Firebase JobDispatcher의 올바른 최소 백오프 지연을 시행합니다. b/113304626
- 라이브러리 내부의 스레딩 보장이 개선되었습니다.
- 내부적으로
LiveData
중복 제거와 관련된 잠재적인 문제가 수정되었습니다.
API 변경사항
- 이제
WorkManager.Configuration
의 일부로WorkerFactory
를 지정하여 런타임 시 자체Worker
인스턴스를 생성할 수 있습니다. 폴백 팩토리는DefaultWorkerFactory
이며 이전 버전의 WorkManager 동작과 일치합니다.Worker
및NonBlockingWorker
의 기본 생성자가 이제 지원 중단됨으로 표시됩니다. 새로운 생성자(Worker(Context, WorkerParameters)
)를 사용하고super(Context, WorkerParameters)
를 호출하세요. WorkManager의 향후 버전에서는 기본 생성자가 삭제됩니다.
- 내부적으로 새로운
ListenableFuture
아티팩트가 사용되기 시작했습니다(Guava 종속 항목 없음). 향후 버전에서는 API에 ListenableFutures가 도입됩니다. 이 변경사항은NonBlockingWorker
의 최종적인 숨기기 해제를 지원합니다. TestDriver.setInitialDelayMet(UUID)
및TestDriver.setPeriodDelayMet(UUID)
를 통해TestDriver
에서 시간 작업을 트리거하는 기능이 추가되었습니다. b/113360060을 참조하세요.
브레이킹 체인지
- 기본
Worker
및NonBlockingWorker
생성자가 지원 중단되었습니다. 가능한 한 빨리 새로운 생성자로 마이그레이션하세요. 향후 버전에서는 기본 생성자가 삭제됩니다.
2018년 8월 27일
WorkManager
WorkManager 1.0.0-alpha08
이 출시되었습니다. 이 출시에서는 버그가 수정되었습니다.
버그 수정
- WorkManager 구성요소가 직접 부팅을 인식하지 못하도록 명시적으로 지정하여 직접 부팅 중에 실행되지 않게 합니다. 이후에는 직접 부팅을 인식하는 WorkManager 버전이 제공될 예정입니다. b/112665532
- 다시 시도하는 작업이 실행되지 않는 문제가 해결되었습니다. b/112604021
- 주기적인 작업이 반복적으로 실행되지 않는 문제가 해결되었습니다(위의 문제와 관련 있음). b/112859683
- 앱 프로세스가 이미 실행 중인 경우 백오프 정책을 준수합니다.
- 10KB 한도를 나타내도록
Data
의 예외 메시지가 수정되었습니다. JobScheduler
처리 완료의 지연 시간을 고려하여Configuration.setMaxSchedulerLimit(int)
의 최대값을 50으로 낮췄습니다. b/112817355
2018년 8월 16일
WorkManager
Navigation 1.0.0-alpha07
이 출시되었습니다. 이 출시에서는 버그가 수정되고 API가 일부 변경되었습니다.
버그 수정
- 음수 제한이 지정된 SQL 쿼리가 무제한의 결과를 반환할 수 있는 문제가 해결되었습니다.
- 실행을 완료한 작업이 이제 다른 스케줄러에 있는 동일한 작업의 대기 중인 복사본을 모두 올바로 취소합니다. 이 문제로
JobScheduler
작업 수 제한이 초과되었습니다. b/111569265 ConstraintTracker
의ConcurrentModificationException
이 수정되었습니다. b/112272753Data.getBooleanArray(String)
및Data.getIntArray(String)
의 반환 유형 주석이@NonNull
대신@Nullable
로 변경되었습니다. b/112275229를 참조하세요.
API 변경사항
Worker
는 이제 새로운 클래스NonBlockingWorker
를 확장합니다. 변경돼도 현재 사용에는 영향을 미치지 않습니다. 향후에NonBlockingWorker
는 맞춤 스레딩 솔루션을 완벽하게 지원하는 항목이 될 것입니다.Data.getBooleanArray(String)
및Data.getIntArray(String)
의 반환 유형 주석이@NonNull
대신@Nullable
로 변경되었습니다. b/112275229를 참조하세요.- Kotlin 확장:
Map.toWorkData()
지원이 중단되었으며 기존 API와의 일관성을 향상하도록 최상위 수준workDataOf(vararg Pair<String, Any?>)
가 추가되었습니다.
2018년 8월 10일
Navigation
Navigation 1.0.0-alpha05
가 출시되었습니다. 이 출시에서는 버그가 수정되었습니다.
버그 수정
- 잘못된 백 스택 동작을 일으키는 버그가 수정되었습니다. b/111907708
- Generated Args 클래스의
equals()
에 있는 버그가 수정되었습니다. b/111450897 - Safe Args의 빌드 실패가 해결되었습니다. b/109409713
- 리소스 식별자에서 자바 이름으로의 변환이 수정되었습니다. b/111602491
- Safe Args 플러그인의 null 허용 여부 관련 오류 메시지가 수정되었습니다.
- 누락된 null 허용 여부 주석이 추가되었습니다.
2018 8월 6일
Lifecycle, Room, Paging의 AndroidX 버전에서 2.0.0-rc01
버전을 출시합니다. 모든 아티팩트는 2.0.0-beta01
버전과 동일합니다.
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일
Navigation
Navigation 1.0.0-alpha04
및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.
API/동작 변경사항
- NavHostFragment는 항상 현재 Fragment를 기본 탐색 프래그먼트로 설정하여, 하위 프래그먼트 관리자가 열린 후에야 외부 NavController가 열리도록 합니다. (b/111345778)
Safe Args
- 브레이킹 체인지: ConstraintLayout 2.0.0-alpha1과 같은 다른 라이브러리와의 충돌을 피하기 위해
app:type
이app:argType
으로 변경되었습니다. (b/111110548) - 이제 Safe Args의 오류 메시지를 클릭할 수 있습니다. (b/111534438)
- 이제 Args 클래스에서
NonNull
속성이 실제로 null이 아님을 확인합니다. (b/111451769) - NavDirections 및 Args에서 생성한 클래스에
NonNull
주석이 추가되었습니다. (b/111455455 및 b/111455456)
버그 수정
- fragment 대상으로 딥 링크 후 발생하는 시스템 뒤로 버튼의 문제가 해결되었습니다. b/111515685
2018년 7월 12일
Navigation
Navigation 1.0.0-alpha03
및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.
API/동작 변경사항
- 툴바에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. (b/109868820)
- CollapsingToolbarLayout에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. (b/110887183)
- 이제 popBackStack()은 백 스택이 비어 있거나 지정된 대상 ID가 백 스택에 없으면 false를 반환합니다. (b/110893637)
- 이제 FragmentManager가 상태를 저장하고 나면 FragmentNavigator가 탐색 작업을 무시하여 'onSaveInstanceState 후 이 작업을 실행할 수 없음' 예외가 방지됩니다. (b/110987825)
Safe Args
- 브레이킹 체인지: 작업과 인수 이름에 포함된 영숫자 이외의 문자는 각각의 NavDirections 메서드 이름에서 카멜식 대소문자 표기로 대체됩니다.
- 예를 들어
DemoController.index
는setDemoControllerIndex
가 됩니다. (b/79995048) - 예를 들어
action_show_settings
는actionShowSettings
가 됩니다. (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)
버그 수정
- Fragment 수명 주기 메서드가 수행되는 동안 탐색할 때 발생하는 문제가 해결되었습니다. b/109916080
- 중첩된 그래프를 여러 번 탐색할 때 발생하는 문제가 해결되었습니다. (b/110178671)
- 그래프에서 첫 번째 대상으로
setPopUpTo
를 사용할 때 발생하는 문제가 해결되었습니다. (b/109909461) - 모든
app:defaultValue
값이 문자열로 전달되는 문제를 해결했습니다. (b/110710788) - Android Gradle 플러그인 3.2 베타 01에 번들로 제공되는 aapt2에서 이제 Navigation 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
에 이미 출시됨)PagedListAdapter
및AsyncPagedListDiffer
에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. b/110711937
2018년 6월 26일
Paging
Paging 1.0.1
이 출시되었습니다. 이 출시에서는 runtime
의 버그 1개가 수정되었습니다. 안정성을 위해 1.0.1
을 사용하는 것이 좋습니다. Paging RxJava2 1.0.1
도 출시되었으며, 이 버전은 1.0.0-rc1
과 동일합니다.
버그 수정
PagedListAdapter
및AsyncPagedListDiffer
에서 이동 이벤트를 알리지 못하는 장애가 해결되었습니다. b/110711937
WorkManager
WorkManager 1.0.0-alpha04
이 출시되었습니다.
버그 수정
이제
AlarmManager
기반 구현을 사용할 때PeriodicWorkRequest
일정이 올바르게 변경됩니다.강제 종료나 재부팅 후 모든 worker의 일정을 변경할 때 발생할 수 있는 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/109572353work-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()
를 통해 나타납니다.JobScheduler
또는AlarmManager
에 전송할 수 있는 작업 수를 적용할 수 있도록Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
가 추가되었습니다. 이를 통해WorkManager
가 사용 가능한 모든JobScheduler
슬롯을 차지하지 못하게 할 수 있습니다.WorkManager
가 안전하게 사용할 수 있는JobScheduler
작업 ID의 범위를 정의하는 데 도움이 되는Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
가 추가되었습니다. b/79996760Worker.getRunAttemptCount()
가 특정Worker
의 현재 실행 수를 반환합니다. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
를 사용하면 고유한PeriodicWorkRequest
를 대기열에 추가할 수 있습니다. b/79600647WorkManager.cancelAllWork()
는 모든Worker
를 취소합니다.WorkManager
를 사용하는 라이브러리는 이 메서드가 내부 상태의 추가 정리를 위해WorkManager.getLastCancelAllTimeMillis()
를 사용하여 언제 마지막으로 호출되었는지 쿼리할 수 있습니다.완료된 작업을 내부 데이터베이스에서 삭제할 수 있도록
WorkManager.pruneWork()
가 추가되었습니다. b/79950952, b/109710758
동작 변경사항
- 모든
WorkRequest
의 암시적인 태그가 추가되었습니다. 이 태그는Worker
의 정규화된 클래스 이름입니다. 이를 통해tag
없이 또는id
를 사용할 수 없을 때WorkRequest
를 삭제할 수 있습니다. (b/109572351)
브레이킹 체인지
Worker.WorkerResult
의 이름이Worker.Result
로 변경되었습니다.이제
Worker.onStopped
에 추가isCancelled
매개변수가 있습니다. 이 매개변수는Worker
가 명시적으로 취소되었을 때true
로 설정됩니다.
2018년 6월 7일
Navigation 1.0.0-alpha02
가 출시되었습니다.
Navigation
동작 변경사항
FragmentNavigator
에서 이제setReorderingAllowed(true)
를 사용합니다. (b/109826220)탐색이 이제 딥 링크 URL에서 파싱된 URLDecodes 인수를 디코딩합니다. (b/79982454)
버그 수정
Fragment 수명 주기 메서드에서 탐색을 호출할 때 발생하는
IllegalStateException
을 수정했습니다. (b/79632233)애니메이션 사용 시 깜박이는 문제를 해결하기 위해 탐색에서 이제 지원 라이브러리 27.1.1을 사용합니다. (b/80160903)
하위 fragment로 defaultNavHost="true"를 사용할 때 발생하는
IllegalArgumentException
을 수정했습니다. (b/79656847)NavDeepLinkBuilder를 사용할 때 발생하는
StackOverflowError
를 해결했습니다. (b/109653065)중첩된 그래프로 다시 이동할 때 발생하는
IllegalArgumentException
을 수정했습니다. (b/80453447)launchSingleTop
사용 시 Fragment가 중복되는 문제를 해결했습니다. (b/79407969)탐색에서 이제 중첩된 그래프의 올바른 합성 백 스택을 빌드합니다. (b/79734195)
MenuItem
으로 중첩된 그래프를 사용할 때 NavigationUI는 올바른 항목을 강조표시합니다. (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/79550068Application.onCreate()
에서Worker
의 일정 변경을 초래하는 문제가 수정되었습니다. b/79660657OS에서 허용하는 작업보다 더 많이 작업을 예약할 수 있는 문제가 해결되었습니다. b/79497378
Worker
관련 wake lock 정리를 백그라운드 스레드로 이동했습니다.이제 대기 중인 작업이 모두 완료되면
AlarmManager
구현이 적절하게 정리됩니다.영어 이외의 언어에 영향을 미쳤던 정리 SQL 쿼리가 수정되었습니다. b/80065360
Data
에float
지원이 추가되었습니다. b/79443878이제
Data.Builder.putAll()
에서Builder
의 인스턴스를 반환합니다. b/79699162문서에 Javadoc 및 수정사항이 추가되었습니다. b/79691663
API 변경사항
Worker
가 중지에 반응할 수 있습니다.Worker.isStopped()
를 사용하여Worker
가 중지되었는지 확인할 수 있습니다.Worker.onStopped()
를 사용하여 간단한 정리 작업을 실행할 수 있습니다.Worker.getTags()
API가Worker
와 관련된 태그Set
를 반환합니다.duration과
TimeUnit
의 조합을 사용하는 API의javax.time.Duration
오버로드가 추가되었습니다. 이 오버로드는@RequiresApi(26)
에 의해 보호됩니다.WorkManager
확장이androidx.work.ktx
패키지에서androidx.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.0
및 Room 1.1.0
이 2개의 새로운 아키텍처 구성요소인 Navigation 및 WorkManager의 알파와 함께 출시되었습니다.
Paging과 Room은 최신 출시 후보가 된 후 변경된 사항이 없습니다.
새 라이브러리: 탐색
탐색은 인앱 탐색 빌드를 위한 프레임워크를 제공합니다. 최초 출시는 1.0.0-alpha01
입니다.
새 라이브러리: WorkManager
WorkManager는 제약 조건을 인식하는 보장된 백그라운드 작업의 예약과 실행을 간소화합니다. 최초 출시는 1.0.0-alpha01
입니다.
AndroidX
패키지 이름, 아티팩트 이름, 다른 AndroidX 라이브러리의 종속 항목 업데이트를 비롯한
아키텍처 구성요소가 AndroidX의 일부가 되어가고 있습니다.
다른 제품과 함께 사용할 수 있도록 2.0.0-alpha1
버전에 출시됩니다.
AndroidX 라이브러리를 제공합니다.
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 대안을 제공하며 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();
Paging
새로운 기능
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
Room
버그 수정
Room의 Rx
Single
및Maybe
구현에서 예정보다 빨리 쿼리를 재활용하면 반환된Single
또는Maybe
인스턴스에 관찰자를 2개 이상 추가하는 경우 문제가 발생하는 중요한 버그를 수정했습니다. b/76031240RoomDatabase.clearAllTables는 트랜잭션 내에서 호출되는 데이터베이스를
VACUUM
하지 않습니다. b/77235565
2018년 3월 21일
Room 1.1.0-beta1
, Paging 1.0.0-alpha7
, Lifecycles 1.1.1
이 출시되었습니다.
Room
API 변경사항
- API 검토 의견에 따라
@RawQuery
에서 더 이상 쿼리 매개변수로String
이 전달되도록 허용하지 않습니다. SupportSQLiteQuery를 사용해야 합니다. (인수 지원으로 SupportSQLiteQuery의 인스턴스를 손쉽게 만들려면 SimpleSQLiteQuery 참조) - RoomDatabase.Builder의 fallbackToDestructiveMigrationFrom 메서드에서 이제
vararg Integer
대신vararg int
를 허용합니다.
버그 수정
이제 RoomDatabase.clearAllTables에서 WAL 체크포인트를 설정하고 데이터베이스를
VACUUM
하여 운영체제에 공간을 다시 반환하려고 시도합니다.이제
@RawQuery
에서 Pojo가Embedded
필드나Relation
을 통해 항목 1개 이상을 참조하는 한observedEntities
속성에 Pojo를 허용합니다. b/74041772Paging: Room의 DataSource 구현에서 이제 다중 테이블 종속 항목(예: 관계, 조인)을 올바로 처리합니다. 이전에는 새로운 결과를 트리거하지 못 하거나 컴파일에 실패했습니다. b/74128314
수명 주기
유일한 작은 변경사항으로, android.arch.core.util.Function
이 arch:runtime
에서 arch:common
으로 이동했습니다. 런타임 종속 항목 없이 사용할 수 있습니다. (예: 아래 paging:common
참조)
lifecycle:common
은 lifecycle:runtime
의 종속성이므로 이러한 변경은 lifecycle:runtime
에 직접 영향을 주지 않으며 Paging과 마찬가지로 lifecycle:common
에 직접 종속되는 모듈에만 영향을 줍니다.
Paging
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
가 호출되지 않는 버그가 수정되었습니다.
2018년 3월 2일
Room 1.1.0-alpha3
가 출시되었습니다. Room 1.1.0
에 마지막으로 계획된 알파 버전입니다.
API 변경사항
이제 InvalidationTracker의
addObserver
와removeObserver
가 동기화되고 UI가 아닌 스레드에서 호출되어야 합니다. 이렇게 되면 테이블을 관찰하는 동안 발생하는 일부 경합 상태가 방지됩니다.RoomDatabase 클래스에 모든 테이블 콘텐츠를 잘라내는 새로운
clearAllTables()
메서드가 있습니다. b/63807999이제
SupportSQLiteQuery
에 쿼리 매개변수 개수를 반환하는getArgCount()
메서드가 포함됩니다. b/67038952
버그 수정
이제
@RawQuery
가 Paging 쿼리에서 올바르게 지원됩니다. b/72600425이제 두 개 이상의
Dao
인터페이스가 동일한 패키지의 내부 클래스이고 이름이 같을 때 이름이 충돌하지 않도록 생성된Dao
클래스 이름을 Room에서 올바르게 지정합니다. b/73536380Pojo
의 일반 필드 유형이 확장 클래스의 멤버로 올바르게 파싱됩니다. 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-alpha6
및com.android.support:recyclerview-v7:27.1.0
으로 업데이트- ListAdapter가 Paging에서 RecyclerView로 이동했으므로 이 업데이트는 동시에 수행되어야 합니다.
- 언급된 모든
ListAdapterHelper
를AsyncListDiffer
로 업데이트- 더 명시적인
getCurrentList().getItem(index)
및getCurrentList().size()
의 호출 패턴에 따라getItem(index)
/getItemCount()
가 삭제되었습니다.
- 더 명시적인
- 언급된 모든
ListAdapterConfig
를AsyncDifferConfig
로 업데이트 - 언급된 모든
DiffCallback
을DiffUtil.IttemCallback
으로 업데이트 - 언급된 모든
PagedListAdapterHelper
를AsyncPagedListDiffer
로 업데이트 - 언급된 모든
setList()
를submitList()
로 업데이트- 목록 diffing의 비동기 특성을 명확히 하기 위해 이름이 변경되었습니다.
버그 수정
- 자리표시자 사용이 중지되었을 때 초기 로드에 잘못된 초기 위치를 전달하는 문제가 해결되었습니다. b/73513780
2018년 2월 15일
Room 1.1.0-alpha2
가 출시되었습니다.
새로운 기능
Room에서 이제 WAL(Write Ahead Logging) 모드로 데이터베이스 열기를 지원합니다. 이 모드에서는 쓰기가 더 이상 읽기 쿼리를 차단하지 않습니다. 이 모드는 여러 연결로 인해 메모리를 더 사용하지만 대개 속도가 더 빠릅니다. 기기가
API 16
이상이고 메모리 용량이 낮은 기기가 아니라면 Room에서 기본적으로 WAL을 사용합니다. 이 동작은RoomDatabase.Builder
에서setJournalMode()
메서드를 사용하여 제어할 수 있습니다. b/67757002Guava 지원: Room에서 이제
DAO
쿼리에서 GuavaOptional<T>
또는ListenableFuture<T>
반환을 지원합니다.ListenableFuture<T>
를 사용하려면 Room에서guava
아티팩트(android.arch.persistence.room:guava:1.1.0-alpha2
)를 가져와야 합니다.Room에서 이제
DAO
쿼리로부터java.util.Optional<T>
반환을 지원합니다.기본 구현이 포함된 인터페이스 메서드가 이제
DAO
클래스의@Transaction
메서드에서 지원됩니다.Java 8
및Kotlin
모두에 적용됩니다. b/72416735
버그 수정
사용할 수 있는 다른 생성자가 있는 경우
@Relation
이 있는 생성자가 컴파일 오류를 일으키지 않습니다. b/72884434이제
@Query
메서드에서'
로 이스케이프 처리된 테이블 이름이 무효화 추적기에서 올바르게 이스케이프 처리됩니다. b/72366965Room에서 이제 주석을 처리하는 동안 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 변경사항
- 이제 지원 중단된
LifecycleActivity
및LifecycleFragment
가 삭제되었습니다.FragmentActivity
,AppCompatActivity
또는 지원Fragment
를 사용하세요. @NonNull
주석이ViewModelProviders
및ViewModelStores
에 추가되었습니다.ViewModelProviders
생성자가 지원 중단되었습니다. 이 생성자의 정적 메서드를 직접 사용하세요.ViewModelProviders.DefaultFactory
가 지원 중단되었습니다.ViewModelProvider.AndroidViewModelFactory
를 사용하세요.ViewModel
및AndroidViewModel
인스턴스를 생성하는 데 적합한 정적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 알파를 사용하려면 Pagingalpha-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
로 이름이 변경되어, 차이를 더 명확히 합니다.LivePagedListBuilder
및DataSource.Factory
가LivePagedListProvider
를 대체합니다. 빌더는 맞춤설정을 강화하고 기본값을 단순화하여 같은 기능을 제공합니다. Factory를 사용하면DataSource
생성 코드를LiveData
와 독립적으로 유지할 수 있습니다.데이터베이스와 네트워크를 함께 사용하는 사례에
PagedList.BoundaryCallback
이 추가되었습니다.PagedList.Builder
생성자는DataSource
+PagedList.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
과 정확히 같은 출시입니다.
버그 수정
LiveDataReactiveStreams
에서 이제 반응형 스트림 사양을 제대로 구현합니다. b/67999342
출시 후보 - 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
로 표시되기만 했음). 자세한 내용은 Lifecycle 문서를 참고하세요.
버그 수정
Room
- 이제 Room에서 컴파일하는 동안 최신 xerial 아티팩트를 사용하여
OutOfMemory
문제를 해결합니다. b/62473121 Query
메서드는 이제@Transaction
으로 주석을 달 수 있습니다. 자세한 내용은@Transaction
에 관한 참고 문서에서 확인하세요. b/65112315- Room에서 공개 API로 의도된 적이 없었던
StringUtil
클래스가 공개 API에서 삭제되었습니다.
- 이제 Room에서 컴파일하는 동안 최신 xerial 아티팩트를 사용하여
Lifecycle
API 수준 24 미만에서 활동이 부분적으로 다뤄질 때
LiveData
가 올바르게 작동합니다. (b/65665621 참고)상위 클래스의
OnLifecycleEvent
메서드가 이제 제대로 호출되고, 호출이 불가능한 경우 컴파일 중에 경고가 인쇄됩니다. b/63474615Lifecycle은 이제
WeakReference
를 LifecycleOwner 개체 Lifecycle이 메모리에 더 오래 유지되는 경우 LifecycleOwner (단지 예방 조치일 뿐이므로 너무 많은 주의사항을Lifecycle
가 유출됨).
2017년 10월 9일
Paging alpha-3
가 출시되었습니다. 이 출시는 Lifecycles 및 Room의 beta 2
출시와 호환됩니다.
버그 수정
- Paging 문서가 개선되었습니다.
2017년 10월 5일
모든 주요 아티팩트(Paging 제외)가 이제 beta 2
입니다.
이 출시에서는 새로운 Paging 버전이 없습니다.
버그 수정
Lifecycle
- 이제
LiveDataReactiveStreams
는LiveData
의 상태가 활성이 아닐 때 소스 게시자 구독을 올바르게 해제합니다. b/62609183 - 상위 클래스가 다른 모듈에서 제공될 때 수명 주기 이벤트가 상위 클래스에 올바르게 전파됩니다. b/63474615
- 구독 생성 중 관찰자가 구독을 취소할 때 LiveData가 관찰자를 올바르게 처리합니다. b/66337741
이제 종속 항목 트리에서 자바 8 언어 아티팩트의
FullLifecycleObserver
를 사용할 수 있습니다. b/66525578Proguard의 경우 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
- 반환된 Pojo에 쿼리 응답의 어떤 열에도 일치하지 않는
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.db
를android.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 데이터베이스 지원
- 데이터베이스 구성의 API 변경사항을 확인하세요. b/65349673, b/65499876
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 및 지원 Fragment에서 이제 LifecycleOwner 인터페이스를 구현합니다.
이 출시도 새 통합을 활용하기 위해 지원 라이브러리 26.1.0
에 의존합니다.
새 라이브러리: Paging
이 출시에는 Paging이라는 새 라이브러리가 포함되어, 필요한 경우
대용량 데이터 세트를 분할하여 RecyclerView에 손쉽게 로드할 수 있습니다. Paging은 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에서 첫 번째 Observer가
onChanged
메서드에서 삭제되면 두 번째 Observer가 무시되는 버그가 수정되었습니다. b/64285805
1.0.0 Alpha 8 - 2017년 8월 1일
동작 변경사항
- 기본 유형의 열이나 NonNull로 주석이 달린 열에
NOT NULL
제약 조건이 추가되었습니다. 이로 인해 테이블의 구조가 변경되므로 이미 아키텍처 구성요소 알파 7 이하를 사용 중인 경우 데이터를 유지하거나 빌더에서fallbackToDestructiveMigration()
메서드를 사용하고 싶다면 이전을 구현해야 합니다. b/62007004
API 변경사항
- SupportSQLiteProgram이 이제 AutoCloseable을 확장합니다. b/63131997
1.0.0 Alpha 7 - 2017년 7월 26일
버그 수정
LifecycleRegistry
removeObserver
메서드에서 LifecycleObserver 재추가를 중단한 심각한 버그가 수정되었습니다.맞춤 데이터베이스의 InvalidationTracker가 수정되었습니다. b/63162311
1.0.0 Alpha 6 - 2017년 7월 25일
동작 변경사항
LifecycleObserver의 호출 순서가 변경되었습니다. 이전에는 observer가 항상 추가 순서대로 호출되었습니다. 즉,
observer1
이observer2
보다 먼저 추가되면ON_CREATE
및 기타 모든 이벤트를observer2
보다 먼저 받습니다. 소멸 이벤트의 경우 추가된 역순으로 관찰자가 호출되기 때문에 소멸 이벤트에는 해당되지 않습니다. 따라서 현재 동작을 보면,observer1
이observer2
보다 먼저 추가되는 경우ON_CREATE
가observer1
에 먼저 전송된 다음observer2
에 전송되지만(ON_START
및ON_RESUME
의 경우도 동일)ON_PAUSE
이벤트는observer2
에 먼저 전송된 후에만observer1
에 전송됩니다(ON_STOP
및ON_DESTROY
의 경우도 동일).마이그레이션이 없으면 Room에서 예외를 발생시킵니다. 이전에는 Room이 데이터베이스를 지우기만 했는데 이제는 비정상 종료됩니다. 개발자는 빌더 API를 호출하여 삭제 동작을 선택할 수 있습니다. b/63872392
API 변경사항
이전이 없는 경우 데이터베이스를 지우도록
RoomDatabase.Builder
에fallbackToDestructiveMigration()
메서드가 추가되었습니다. 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 변경사항
데이터베이스가 생성되거나 열리는 때를 관찰하도록
RoomDatabase.Builder
에 새로운 콜백 메서드가 추가되었습니다. b/62699324@Query에서 이제 RxJava
Maybe
또는Single
을 반환할 수 있습니다. (b/62231019 참조)
android.arch.persistence.room:rxjava2
아티팩트를 사용하여 Room에 RxJava 지원을 추가해야 합니다.
버그 수정
매개변수가 없는
@Delete
쿼리가 수정되었습니다. b/63608092getter와 setter의 Room 유형 검사가 수정되었습니다. b/63733651
1.0.0 Alpha 4 - 2017년 7월 11일
API 변경사항
RoomDatabase에 새로운 편의 메서드(
runInTransaction()
)가 추가되었습니다.@Insert
,@Delete
,@Update
메서드가 이제 다양한 항목 유형의 매개변수를 포함할 수 있습니다. b/62682405
버그 수정
@Dao
메서드의byte[]
처리 문제가 해결되었습니다. b/62460045Room의 마이그레이션 검사에서 이제 대소문자를 구분하지 않는 비교를 사용합니다. b/62875382
Lifecycles 아티팩트의 Proguard 구성이 수정되었습니다. b/62113696
1.0.0 Alpha 3 - 2017년 6월 15일
API 변경사항
@OnLifecycleEvent
가 이제 이벤트 매개변수를 1개만 지원합니다. 이는 향후 기본 메서드가 포함된 인터페이스로 마이그레이션할 수 있도록 자바 8 지원 준비를 위한 변경입니다. 이 변경과 관련하여@OnLifecycleEvent(ON_ANY)
주석이 달린 메서드만 유형Event
의 두 번째 매개변수(첫 번째 매개변수는LifecycleOwner
임)를 받을 수 있습니다. 자세한 내용은 Lifecycle 문서를 참고하세요.LifecycleActivity
및LifecycleFragment
클래스가android.arch.lifecycle:extensions
아티팩트로 이동했습니다.MigrationTestHelper는 테스트 애셋에서 스키마를 읽고 애플리케이션 컨텍스트에 데이터베이스를 만들 수 있도록
Context
대신 Instrumentation 인스턴스를 받습니다.@DAO
메서드의@Insert
,@Delete
,@Update
주석이 이제 매개변수 유형으로Iterable
을 포함할 수 있습니다. b/62259820
버그 수정
lifecycle 이벤트로 재정의된 메서드가 이제 더 이상 여러 번 호출되지 않습니다.
여러
IN
매개변수가 이제 제대로 처리됩니다. b/62608681추상 DAO 클래스가 이제
@Database
인스턴스를 받는 생성자를 포함할 수 있습니다. b/38488747DAO
는 이제 유형 매개변수가 포함된 슈퍼 클래스/슈퍼 인터페이스를 포함할 수 있습니다. b/62103620
1.0.0 Alpha 2 - 2017년 6월 2일
API 변경사항
InvalidationTracker 콜백이 이제 변경된 테이블 이름 목록을 받습니다. b/38468740
SupportSQLiteDatabase 클래스의 API 표면이 감소되었습니다. b/38481640
버그 수정
- 수명 주기의 Proguard 파일. b/62113696
- 유형 변환기의 데이터 손실. b/62100716
@Insert
쿼리에서Long[]
반환이 허용됩니다.
1.0.0 Alpha 1 - 2017년 5월 17일
MinSDK: 14
일반 권고 사항
출시하기 전에 많은 테스트가 수행되었지만 현재 아키텍처 구성요소는 알파 상태입니다. 프로덕션 앱을 빌드하시는 경우 API가 1.0 출시에 앞서 변경될 예정이며 충분히 안정적이지 않을 수 있음을 유의하세요. 사용하는 라이브러리 문제의 디버깅이 불편하다면 아키텍처 구성요소를 먼저 사이트 프로젝트에서 사용해 보시기 바랍니다.
오늘 모두 마이그레이션하는 것은 권장되지 않습니다. 아키텍처 구성요소 1.0을 출시할 때 마이그레이션 가이드가 준비될 예정입니다.
알려진 제한 및 문제
- 지원 라이브러리의 Lifecycle
Fragment
및ActivityCompat
은 아직LifecycleOwner
인터페이스를 구현하지 않습니다. 아키텍처 구성요소가 1.0.0 버전이 되면 구현할 예정입니다.