수명 주기
이 표에는 androidx.lifecycle
그룹의 모든 아티팩트가 나열됩니다.
아티팩트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
lifecycle-* | 2.8.5 | - | - | 2.9.0-alpha02 |
lifecycle-viewmodel-compose | 2.8.5 | - | - | 2.9.0-alpha02 |
종속 항목 선언
Lifecycle의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Kotlin
Groovy
dependencies { def lifecycle_version = "2.8.6" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.6" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.8.6" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.6" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 2.9
버전 2.9.0-alpha02
2024년 9월 4일
androidx.lifecycle:lifecycle-*:2.9.0-alpha02
이 출시되었습니다. 버전 2.9.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- Lifecycle
2.8.5
에서: 난독화를 허용하도록androidx.lifecycle.ReportFragment
ProGuard 규칙을 업데이트합니다 . 추가했습니다. (ff898e1)
외부 기여
androidx.compose.ui.platform.LocalLifecycleOwner
를 공통 소스 세트 (KMP)로 이동합니다. 도움을 주신 JetBrains의 Ivan Matkov에게 감사드립니다. 추가했습니다. (8cd5d03)- Lifecycle
2.8.5
에서: SavedStateHandle.saveable` 확장 프로그램 대리자가 이제 null을 허용하는 값을 지원합니다. 도움을 주신 로만 칼루키에비치님에게 감사드립니다. 추가했습니다. (0d78ea6)
버전 2.9.0-alpha01
2024년 8월 7일
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
이 출시되었습니다. 버전 2.9.0-alpha01에 포함된 커밋을 확인하세요.
Kotlin 멀티플랫폼
- 이제
lifecycle-testing
가 KMP와 호환됩니다. 추가했습니다. (Iea41e) linuxArm64
Kotlin 멀티플랫폼 타겟 지원을 추가합니다. (I139d3, b/338268719)
새로운 기능
- ViewModel을 개별적으로 테스트하기 위한
ViewModelScenario
클래스를 제공하고onCleared
(모든 플랫폼) 및SavedStateHandle
(Android만 해당)을 지원하는 새로운androidx.lifecycle:lifecycle-viewmodel-testing
KMP 아티팩트를 사용할 수 있습니다. (337f68d, c9b3409, 9799a95c, b/264602919) - 이제
ViewModelProvider
로ViewModel
를 만드는 것이 스레드로부터 안전합니다.@MainThread
주석이 삭제되었습니다. 추가했습니다. (Ifd978, b/237006831)
API 변경사항
CreationExtras.Key()
팩토리 함수를 추가하여 익명의CreationExtras.Key
객체 생성을 간소화합니다. 추가했습니다. (I970ee)- 이제
CreationExtras
에 맵과 유사한 연산자 오버로드가 포함되어 Kotlin에서 콘텐츠를 관용적으로 조작할 수 있습니다.CreationExtras
와 함께in
,+=
,+
를 사용할 수 있습니다. 추가했습니다. (Ib4353) CreationExtras
는 이제equals
,hashCode
,toString
메서드를 구현합니다. 추가했습니다. (Ib4353)- 이제 JVM 데스크톱 및 Android 대상에서
NewInstanceFactory
를 사용할 수 있습니다. 추가했습니다. (d3d0892) - Kotlin 언어 버전 2.0에서 기본 애플리케이션을 안전하게 노출하는 인라인 확장 속성 (I39df2)
버그 수정
- 새 플랫폼 API에 대한 액세스에 관한 수동 개요가 삭제되었습니다. 이는 AGP 7.3 이상 (예: R8 버전 3.3)과 함께 R8을 사용할 때 API 모델링을 통해, 그리고 AGP 8.1 이상을 사용할 때 (예: D8 버전 8.1) 모든 빌드에서 자동으로 발생하기 때문입니다. AGP를 사용하지 않는 클라이언트는 D8 버전 8.1 이상으로 업데이트하는 것이 좋습니다. 자세한 내용은 이 도움말을 참조하세요. 추가했습니다. (If6b4c, b/345472586)
버전 2.8
버전 2.8.5
2024년 9월 4일
androidx.lifecycle:lifecycle-*:2.8.5
이 출시되었습니다. 버전 2.8.5에 포함된 커밋을 확인하세요.
버그 수정
- 난독화를 허용하도록
androidx.lifecycle.ReportFragment
ProGuard 규칙을 업데이트합니다 . 추가했습니다. (ff898e1)
외부 기여
- 이제
SavedStateHandle.saveable
확장 위임에서 null을 허용하는 값을 지원합니다. 도움을 주신 로만 칼루키에비치님에게 감사드립니다. 추가했습니다. (0d78ea6)
버전 2.8.4
2024년 7월 24일
androidx.lifecycle:lifecycle-*:2.8.4
이 출시되었습니다. 버전 2.8.4에 포함된 커밋을 확인하세요.
버그 수정
LiveData.asFlow()
는 이제LiveData
에 이미 설정된 값을 수신한 후 반환된 Flow가 즉시 완료되는 사례를 올바르게 처리합니다 (예:take(1)
사용 시). 추가했습니다. (I9c566)- 이제
Lifecycle*Effect
완료가 멱등적입니다. 즉, Lifecycle이 중지되어onStopOrDispose
가 호출된 경우 Lifecycle이STARTED
로 다시 돌아가지 않는 한 폐기 시 두 번째로 호출되지 않습니다. 추가했습니다. (I5f607, b/352364595)
버전 2.8.3
2024년 7월 1일
androidx.lifecycle:lifecycle-*:2.8.3
이 출시되었습니다. 버전 2.8.3에 포함된 커밋을 확인하세요.
버그 수정
- 코드 축소를 사용할 때 Compose 1.6.0 이하와 Lifecycle 2.8의 하위 호환성 문제가 수정되었습니다. (aosp/3133056 및 b/346808608 참고)
버전 2.8.2
2024년 6월 12일
androidx.lifecycle:lifecycle-*:2.8.2
이 출시되었습니다. 버전 2.8.2에 포함된 커밋을 확인하세요.
버그 수정
- Compose 1.6.X 이하에서 Lifecycle 2.8.X를 사용할 때 발생하는
CompositionLocal LocalLifecycleOwner not present
오류가 수정되었습니다. 이제 해결 방법이 필요하지 않으며 모든 버전의 Compose에서 Lifecycle 2.8.2를 사용할 수 있습니다. (aosp/3105647 및 b/336842920 참고) - 이전 버전의
compileOnly
Lifecycle 종속 항목과 버전 2.8 이상을 함께 사용할 때ViewModelProvider
가 더 이상 비정상 종료되지 않으며 LeakCanary와 같은 라이브러리 문제가 수정되었습니다. 추가했습니다. (I80383, b/341792251)
버전 2.8.1
2024년 5월 29일
androidx.lifecycle:lifecycle-*:2.8.1
이 출시되었습니다. 버전 2.8.1에 포함된 커밋을 확인하세요.
버그 수정
lifecycle-viewmodel-compose
는 이제compose-runtime
에 관한 공통 종속 항목만 있으므로compose-ui
의 공통 종속 항목을 삭제합니다. Android 아티팩트는 호환성을 위해compose-ui
를 유지합니다. (aosp/3079334 및 b/339562627 참고)- 속성 위임을 사용하는
ViewModel
의saveable
통합은 이제 자동 생성된 키의 일부로 클래스 이름을 사용하므로 여러 클래스에서 동일한SavedStateHandle
를 사용하는 경우 충돌을 방지합니다. (aosp/3063463 참고)
버전 2.8.0
2024년 5월 14일
androidx.lifecycle:lifecycle-*:2.8.0
이 출시되었습니다. 버전 2.8.0에 포함된 커밋을 확인하세요.
2.7.0 이후 중요 변경사항
- Compose 기반 도우미 API를 Compose UI 외부에서 사용할 수 있도록
LocalLifecycleOwner
를 Compose UI에서lifecycle-runtime-compose
로 이동했습니다. - 이제
lifecycle-runtime-compose
아티팩트에는LifecycleOwner
가 지정된Lifecycle.State
아래로 떨어진 후에도 발생하는 클릭 또는 기타 이벤트를 드롭할 수 있는dropUnlessResumed
및dropUnlessStarted
API가 포함되어 있습니다. 예를 들어onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
를 Navigation Compose와 함께 사용하면 다른 화면으로의 전환이 이미 시작된 후 클릭 이벤트가 처리되지 않도록 할 수 있습니다. 이제
ViewModel.viewModelScope
는 재정의 가능한 생성자 매개변수로, 자체 디스패처와SupervisorJob()
를 삽입하거나runTest
내에서 사용 가능한backgroundScope
를 사용하여 기본값을 재정의할 수 있습니다. 추가했습니다. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
ViewModel
가 Kotlin으로 다시 작성되었으며 이제Closeable
대신AutoClosable
를 사용합니다. 이제getCloseable()
를 통해 가져올 수 있는key
를 사용하여AutoCloseable
객체를 추가할 수 있습니다.이제 키 없이
LifecycleStartEffect
및LifecycleResumeEffect
를 호출하면 오류가 발생하며 이는 이러한 API에서 미러링하는DisposableEffect
API와 동일한 규칙을 따릅니다.LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
를 지원 중단하고LiveData.toPublisher(lifecycleOwner)
로 대체했습니다.이제
lifecycle-livedata-core-ktx
Kotlin 확장 프로그램이lifecycle-livedata-core
모듈로 이동했습니다.많은 거짓양성이 발생하지 않도록
NullSafeMutableLiveData
를 리팩터링했습니다.
Lifecycle Kotlin 멀티플랫폼 호환성
Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
, LifecycleRegistry
의 핵심 Lifecycle API가 이제 Kotlin 멀티플랫폼과 호환되는 아티팩트로 제공됩니다.
영향을 받은 아티팩트:
lifecycle-common
는 대부분의 API를common
로 이동하고 Android 외에도 jvm 및 iOS를 지원합니다.lifecycle-runtime
는 대부분의 API를common
로 이동하고 Android 외에도 jvm 및 iOS를 지원합니다.- 이제
lifecycle-runtime-ktx
가 비어 있으며 모든 API가lifecycle-runtime
로 이동합니다. lifecycle-runtime-compose
가 모든 API를common
로 이동하고androidx.compose
의 멀티플랫폼 지원과 일치하는 Android 아티팩트를 제공합니다.
ViewModel Kotlin 멀티플랫폼 호환성
lifecycle-viewmodel
아티팩트와 ViewModel
, ViewModelStore
, ViewModelStoreOwner
, ViewModelProvider
와 같은 API가 이제 Kotlin 멀티플랫폼과 호환되는 아티팩트로 제공됩니다.
이 변경사항을 수용하기 위해 java.lang.Class<T>
를 가져온 ViewModelProvider
의 메서드와 같은 메서드에 이제 kotlin.reflect.KClass<T>
를 사용하는 동등한 메서드가 있습니다.
Android에서 바이너리 호환성은 유지되어 왔지만, Android API 노출 영역을 공통 API 노출 영역과 비교할 때 몇 가지 주목할 만한 변경사항이 있습니다.
- 이제
ViewModelProvider
인스턴스 구성은 생성자를 직접 호출하는 대신ViewModelProvider.create()
메서드를 통해 이루어집니다. ViewModelProvider.NewInstanceFactory
및ViewModelProvider.AndroidViewModelFactory
는 Android에서만 사용할 수 있습니다.- 맞춤 팩토리는
ViewModelProvider.Factory
에서 확장하고CreationExtras
를 사용하는create
메서드를 사용하거나viewModelFactory
Kotlin DSL을 사용하는 것이 좋습니다.
- 맞춤 팩토리는
- JVM이 아닌 플랫폼에서 맞춤 팩토리 없이
ViewModelProvider
를 사용하면UnsupportedOperationException
이 발생합니다. JVM 플랫폼에서는 맞춤 팩토리가 제공되지 않는 경우 인수가 없는 ViewModel 생성자를 사용하여 호환성을 유지합니다. viewModelScope
는Dispatchers.Main
를 사용할 수 없는 플랫폼 (예:EmptyCoroutineContext
있습니다.
영향을 받은 아티팩트:
lifecycle-viewmodel
는 대부분의 API를common
로 이동하고 Android 외에도 jvm 및 iOS를 지원합니다.- 이제
lifecycle-viewmodel-ktx
가 비어 있으며 모든 API가lifecycle-viewmodel
로 이동합니다. lifecycle-viewmodel-compose
가 모든 API를common
로 이동하고androidx.compose
의 멀티플랫폼 지원과 일치하는 Android 아티팩트를 제공합니다.
동작 변경사항
- 동일한
clazz: KClass<VM : ViewModel>
를 가진initializer
가 이미 추가된 경우 이제InitializerViewModelFactory
(viewModelFactory
빌더 함수 포함)에서IllegalArgumentException
이 발생합니다. 추가했습니다. (Ic3a36)
알려진 문제
lifecycle-*:2.8.0
에는 1.7.0-alpha05 이상의 Compose 버전이 필요합니다 (b/336842920).
버전 2.8.0-rc01
2024년 5월 1일
androidx.lifecycle:lifecycle-*:2.8.0-rc01
이 출시되었습니다. 버전 2.8.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
lifecycle-common
클래스의 기준 프로필이 제대로 패키징되지 않는 문제를 수정했습니다. 이제lifecycle-runtime
AAR에 패키징됩니다. (aosp/3038274 및 b/322382422 참고)- ViewModel에 연결된
AutoCloseable
인스턴스가 삭제되는 방식의 의도하지 않은 순서 변경을 수정했습니다. 이전 순서인addCloseable(String, AutoCloseable)
,addClosable(AutoCloseable)
,onCleared()
의 이전 순서가 복원되었습니다. (aosp/3041632 참고) - 네이티브 및 JVM 데스크톱 환경에서
viewModelScope
의 기본 생성 동작을 개선합니다. (aosp/3039221 참고)
외부 기여
- JVM 데스크톱의 기본 스레드 확인 기능을 개선해 주신 빅터 크롭님께 감사드립니다. (aosp/3037116 참고)
버전 2.8.0-beta01
2024년 4월 17일
androidx.lifecycle:lifecycle-*:2.8.0-beta01
이 출시되었습니다. 버전 2.8.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
lifecycle-runtime-compose
아티팩트가 Kotlin 멀티플랫폼과 호환되어 코드를common
로 이동하고androidx.compose
의 멀티플랫폼 지원과 일치하는 Android 아티팩트를 제공합니다. (If7a71, I4f4a0, b/331769623)
버전 2.8.0-alpha04
2024년 4월 3일
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
이 출시되었습니다. 버전 2.8.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
lifecycle-viewmodel-compose
아티팩트가 Kotlin 멀티플랫폼과 호환되어 코드를common
로 이동하고androidx.compose
의 멀티플랫폼 지원과 일치하는 Android 아티팩트를 제공합니다. 이 변경사항에 따라 컴포저블viewModel
메서드는 이제java.lang.Class
외에KClass
를 허용합니다. b/330323282를 참조하세요.
버그 수정
종속 항목 업데이트
- 이제
lifecycle-viewmodel-compose
아티팩트가 Compose 1.6.0에 종속됩니다. - Lifecycle이 이제 프로필 설치 프로그램 1.3.1에 종속됩니다.
버전 2.8.0-alpha03
2024년 3월 20일
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
이 출시되었습니다. 버전 2.8.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
이제
ViewModel.viewModelScope
는 재정의 가능한 생성자 매개변수로, 자체 디스패처와SupervisorJob()
를 삽입하거나runTest
내에서 사용 가능한backgroundScope
를 사용하여 기본값을 재정의할 수 있습니다. 추가했습니다. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Kotlin 멀티플랫폼 호환성
lifecycle-viewmodel
아티팩트와 ViewModel
, ViewModelStore
, ViewModelStoreOwner
, ViewModelProvider
와 같은 API가 이제 Kotlin 멀티플랫폼과 호환되는 아티팩트로 제공됩니다. b/214568825를 참조하세요.
이 변경사항을 수용하기 위해 java.lang.Class<T>
를 가져온 ViewModelProvider
의 메서드와 같은 메서드에 이제 kotlin.reflect.KClass<T>
를 사용하는 동등한 메서드가 있습니다.
Android에서 바이너리 호환성은 유지되어 왔지만, Android API 노출 영역을 공통 API 노출 영역과 비교할 때 몇 가지 주목할 만한 변경사항이 있습니다.
- 이제
ViewModelProvider
인스턴스 구성은 생성자를 직접 호출하는 대신ViewModelProvider.create()
메서드를 통해 이루어집니다. ViewModelProvider.NewInstanceFactory
및ViewModelProvider.AndroidViewModelFactory
는 Android에서만 사용할 수 있습니다.- 맞춤 팩토리는
ViewModelProvider.Factory
에서 확장하고CreationExtras
를 사용하는create
메서드를 사용하거나viewModelFactory
Kotlin DSL을 사용하는 것이 좋습니다.
- 맞춤 팩토리는
- JVM이 아닌 플랫폼에서 맞춤 팩토리 없이
ViewModelProvider
를 사용하면UnsupportedOperationException
이 발생합니다. JVM 플랫폼에서는 맞춤 팩토리가 제공되지 않는 경우 인수가 없는 ViewModel 생성자를 사용하여 호환성을 유지합니다. viewModelScope
는Dispatchers.Main
를 사용할 수 없는 플랫폼 (예:EmptyCoroutineContext
있습니다.
동작 변경사항
- 동일한
clazz: KClass<VM : ViewModel>
를 가진initializer
가 이미 추가된 경우 이제InitializerViewModelFactory
(viewModelFactory
빌더 함수 포함)에서IllegalArgumentException
이 발생합니다. 추가했습니다. (Ic3a36)
버그 수정
- 이제
ViewModel.getCloseable
가 중복 키를 처리합니다.key
에 이미 연결된AutoCloseable
리소스가 있으면 이전 리소스가 즉시 교체되고 닫힙니다. 추가했습니다. (Ibeb67) - 이제
ViewModel
의viewModelScope
액세스가 스레드로부터 안전합니다. 추가했습니다. (If4766, b/322407038)
외부 기여
- Compose 기반 도우미 API를 Compose UI 외부에서 사용할 수 있도록
LocalLifecycleOwner
가 Compose UI에서 수명 주기 런타임 Compose로 이동했습니다. 도움을 주신 Jake Wharton에게 감사드립니다. 추가했습니다. (I6c41b, b/328263448)
버전 2.8.0-alpha02
2024년 2월 21일
androidx.lifecycle:lifecycle-*:2.8.0-alpha02
이 출시되었습니다. 버전 2.8.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
LifecycleOwner
가 지정된Lifecycle.State
아래로 떨어진 후에도 발생하는 클릭 또는 기타 이벤트를 드롭할 수 있는dropUnlessResumed
및dropUnlessStarted
API가 추가되었습니다. 예를 들어onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
를 Navigation Compose와 함께 사용하여 다른 화면으로의 전환이 이미 시작된 후 클릭 이벤트가 처리되지 않도록 할 수 있습니다. (Icba83, b/317230685)
Kotlin 변환
- 이제
ViewModel
가 Kotlin으로 작성됩니다. (I16f26, b/214568825) - 이제
lifecycle-viewmodel-ktx
Kotlin 확장 프로그램이 기본 수명 주기 모듈로 이동했습니다. 추가했습니다. (Id787b, b/274800183) - 이제
lifecycle-runtime-ktx
Kotlin 확장 프로그램이 기본 수명 주기 모듈로 이동했습니다. 추가했습니다. (Ic3686, b/274800183) - 이제
lifecycle-livedata-core-ktx
Kotlin 확장 프로그램이 기본 수명 주기 모듈로 이동했습니다. 추가했습니다. (I54a3d, b/274800183)
Kotlin 멀티플랫폼 호환성
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
,LifecycleRegistry
의 핵심 Lifecycle API가 이제 Kotlin 멀티플랫폼과 호환되는 아티팩트로 제공됩니다. b/317249252를 참조하세요.
API 변경사항
- 이제 키 없이
LifecycleStartEffect
및LifecycleResumeEffect
를 호출하면 오류가 발생하며 이는 이러한 API에서 미러링하는DisposableEffect
API와 동일한 규칙을 따릅니다. 추가했습니다. (Ib0e0c, b/323518079) ViewModel
는 이제Closeable
대신AutoCloseable
를 사용합니다. 이는 이전 버전과 호환되는 변경사항입니다. 추가했습니다. (I27f8e, b/214568825)LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
를 지원 중단하고LiveData.toPublisher(lifecycleOwner)
로 대체했습니다. 추가했습니다. (Iabe29, b/262623005)
외부 기여
- Lifecycle을 Kotlin 멀티플랫폼으로 이전하는 데 도움을 준 Jetbrains의 Ivan Matkov에게 감사드립니다. (aosp/2926690, I0c5ac, If445d 참고)
버전 2.8.0-alpha01
2024년 1월 24일
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
이 출시되었습니다. 버전 2.8.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
ViewModel
가getCloseable()
를 통해 검색할 수 있는key
를 사용하여Closeable
객체를 추가할 수 있도록 지원합니다. 추가했습니다. (I3cf63)
버전 2.7
버전 2.7.0
2024년 1월 10일
androidx.lifecycle:lifecycle-*:2.7.0
이 출시되었습니다. 버전 2.7.0에 포함된 커밋을 확인하세요.
2.6.0 이후 중요 변경사항
- 이제
TestLifecycleOwner
에 정지 함수setCurrentState()
가 포함되어 반환 전에 상태 변경과 모든LifecycleObserver
콜백이 완료되도록 합니다. 특히currentState
속성을 직접 설정하는 것과 달리runBlocking
를 사용하지 않으므로runTest
에서 제공하는 코루틴과 같은 코루틴 내에서 안전하게 사용할 수 있습니다. - 이제
map
및switchMap
의LiveData
확장 프로그램이distinctUntilChanged
의 동작을 미러링합니다.LiveData
에value
가 설정되어 있으면map
/switchMap
함수가 즉시 호출되어 반환된LiveData
의value
를 채웁니다. 이렇게 하면 초깃값이 첫 번째 컴포지션의 일부로 설정되지만 (observeAsState()
와 함께 사용될 때) 관찰 동작은 변경되지 않습니다. 소스LiveData
의 업데이트 값은 여전히LiveData
관찰을 시작한 후에만 적용됩니다. - 이 출시에서는 프로세스 종료 및 재생성 후
SavedStateHandle
가 맞춤Parcelable
클래스를 제대로 복원하지 않는 문제를 해결합니다. Android 프레임워크에서 손실되는 유형 정보로 인해 맞춤 Parcelable의 배열에는 추가 작업 (올바른 유형의 유형이 지정된 배열을 수동으로 생성)이 필요하며get
,getLiveData
,getStateFlow
관련 문서에서는 이제 이 제한을 구체적으로 설명합니다. LifecycleObserver
와 연결된 proguard Keep 규칙이 삭제되었습니다. 즉, 리플렉션을 통해 API를 사용하려는 Proguard 코드 (예: 지원 중단된@OnLifecycleEvent
주석 사용)는 특정 사용 사례를 위한 자체 Keep 규칙을 제공해야 합니다.
수명 주기 이벤트 관측 가능성
LifecycleEventObserver
사용의 대안으로 이제Lifecycle.asFlow()
확장 메서드를 통해Lifecycle.Event
의Flow
를 관찰할 수 있습니다.- 이제 Jetpack Compose 사용자는
LifecycleEventEffect
를 사용하여Lifecycle.Event
에 기반한 Compose 부작용을 실행할 수 있습니다.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Jetpack Compose 사용자는
LifecycleStartEffect
및LifecycleResumeEffect
를 사용하여 이벤트 쌍(각각 중지에서 시작, 재개에서 일시중지)을 처리할 수 있습니다. 이 API는DisposableEffect
에 있는 API를 미러링하며, 상태가 위로 올라가면 변경한 내용을 다시 아래로 내려가야 하는 경우에 적합합니다.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
자세한 내용은 수명 주기 이벤트에서 코드 실행을 참고하세요.
수명 주기 상태 관측 가능성
- 이제
value
가 현재Lifecycle.State
인StateFlow
을 반환하는Lifecycle.currentStateFlow
속성을 통해 현재Lifecycle.State
를 관찰할 수 있습니다. - Jetpack Compose 사용자는
Lifecycle.currentStateAsState()
확장 프로그램을 사용하여Lifecycle.State
를 ComposeState
로 직접 노출할 수 있습니다. 이는lifecycle.currentStateFlow.collectAsState()
와 동일하며 더 짧은 대안입니다.
자세한 내용은 흐름을 사용하여 수명 주기 상태 수집을 참조하세요.
버전 2.7.0-rc02
2023년 12월 13일
androidx.lifecycle:lifecycle-*:2.7.0-rc02
이 출시되었습니다. 버전 2.7.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 프로세스 종료 및 재생성 후
SavedStateHandle
가 맞춤Parcelable
클래스를 제대로 복원하지 않는 문제를 수정했습니다. Android 프레임워크에서 손실되는 유형 정보로 인해 맞춤 Parcelable의 배열에는 추가 작업 (올바른 유형의 유형이 지정된 배열을 수동으로 생성)이 필요하며get
,getLiveData
,getStateFlow
관련 문서에서는 이제 이 제한을 구체적으로 설명합니다. 추가했습니다. (I0b55a)
버전 2.7.0-rc01
2023년 11월 15일
androidx.lifecycle:lifecycle-*:2.7.0-rc01
이 출시되었습니다. 버전 2.7.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
LifecycleOwner
가 변경되면LifecycleStartEffect
및LifecycleResumeEffect
가 효과 블록을 올바르게 삭제하고 다시 만듭니다. 추가했습니다. (Ia25c6)
버전 2.7.0-beta01
2023년 11월 1일
androidx.lifecycle:lifecycle-*:2.7.0-beta01
은 변경사항 없이 출시되었습니다. 버전 2.7.0-beta01에 포함된 커밋을 확인하세요.
- 베타 버전 업데이트로, 이 출시 버전에 큰 변경사항은 없습니다.
버전 2.7.0-alpha03
2023년 10월 18일
androidx.lifecycle:lifecycle-*:2.7.0-alpha03
이 출시되었습니다. 버전 2.7.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
lifecycle-runtime-testing
에는 코루틴 내부에서currentState
필드를 사용하여TestLifecycleOwner
의Lifecycle.State
가 설정되지 않도록 하는 새로운 린트 검사가 포함되어 있습니다. 이제 린트 검사에서 차단 없이Lifecycle.State
를 설정할 수 있는 정지setCurrentState
를 제안합니다. 추가했습니다. (Icf728, b/297880630)
버그 수정
- 최초 호출과 후속 호출 모두에서 동일한
LiveData
인스턴스를 반환하면LiveData
인스턴스가 소스로 추가되지 않는LiveData.switchMap
문제가 수정되었습니다. 추가했습니다. (Ibedcba7)
버전 2.7.0-alpha02
2023년 9월 6일
androidx.lifecycle:lifecycle-*:2.7.0-alpha02
이 출시되었습니다. 버전 2.7.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
TestLifecycleOwner
에는 정지 함수setCurrentState()
가 포함되어runTest
에서 제공하는 것과 같은 코루틴 내에서TestLifecycleOwner
를 사용할 수 있는 옵션을 사용자에게 제공합니다. 추가했습니다. (I329de, b/259344129)
API 변경사항
lifecycle-livedata-ktx
모듈의 모든 파일이 기본lifecycle-livedata
모듈로 이동했습니다. 추가했습니다. (I10c6f, b/274800183)
동작 변경사항
- 이제
LiveData.map()
및LiveData.switchMap()
확장 프로그램은 이전LiveData
에 설정된 값이 있는 경우 반환된LiveData
의value
를 설정하므로 Jetpack Compose에서 결과 LiveData를 사용할 때 초기 컴포지션에서 올바른 상태가 유지됩니다. 추가했습니다. (I91d2b, b/269479952) - 이제
ViewModel
가 이미onCleared()
호출을 수신한 경우ViewModel
의addCloseable()
가Closeable
를 즉시 닫습니다. 추가했습니다. (I4712e, b/280294730)
버그 수정
- Lifecycle
2.6.2
에서: 상태가 복원되고 상위SavedStateRegistry
에 실제로 상태를 저장하지 않고save()
가 호출된 후 상태가 다시 복원되는 경우 프로세스 종료 후SavedStateHandle
가 올바르게 복원되지 않는 문제가 수정되었습니다. 이를 통해rememberSaveable
과 Navigation Compose의NavHost
간의 상호작용이 수정됩니다. (aosp/2729289 참고)
버전 2.7.0-alpha01
2023년 7월 26일
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
이 출시되었습니다. 버전 2.7.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
Lifecycle.State
를Lifecycle.currentStateFlow
를 통해 Compose에서 관찰할 수 있으며, 이는value
가 현재Lifecycle.State
인StateFlow
을 반환합니다. 추가했습니다. (Ib212d, b/209684871) - 이제
Lifecycle.Event
를Lifecycle.asFlow().
를 사용하여Flow
로 관찰할 수 있습니다. (If2c0f, b/176311030) Lifecycle.Event.ON_RESUME
및Lifecycle.Event.ON_PAUSE
이벤트 콜백에 기반하여 ComposeSideEffect
를 실행하도록LifecycleResumeEffect
API를 추가했습니다. 추가했습니다. (I60386, b/235529345)Lifecycle.Event.ON_START
및Lifecycle.Event.ON_STOP
이벤트 콜백에 따라 ComposeSideEffect
를 실행하도록LifecycleStartEffect
API를 추가했습니다. 추가했습니다. (I5a8d1, b/235529345)Lifecycle.Event
에 기반하여 ComposeSideEffect
를 실행하도록LifecycleEventEffect
API를 추가했습니다. 추가했습니다. (Ic9794, b/235529345)Lifecycle.State
를 ComposeState
로 직접 노출하도록Lifecycle.collectAsState()
확장 프로그램이 추가되었습니다. 이는lifecycle.currentStateFlow.collectAsState()
와 동일하며 더 짧은 대안입니다. 추가했습니다. (I11015, b/235529345)
버그 수정
- 이제
LiveData.distinctUntilChanged()
확장 프로그램은 이전LiveData
에 설정된 값이 있는 경우 반환된LiveData
의value
를 설정합니다. 관찰 동작은 변경되지 않습니다. 소스LiveData
에서 업데이트된 값은distinctUntilChanged()
에서 반환된LiveData
의 관찰을 시작한 후에만 적용됩니다. 추가했습니다. (Ib482f) LifecycleObserver
와 연결된 proguard Keep 규칙이 삭제되었습니다. 즉, 리플렉션을 통해 API를 사용하려는 Proguarded 코드는 특정 사용 사례에 대한 자체 Keep 규칙을 제공해야 합니다. 추가했습니다. (Ia12fd)
버전 2.6
버전 2.6.2
2023년 9월 6일
androidx.lifecycle:lifecycle-*:2.6.2
이 출시되었습니다. 버전 2.6.2에 포함된 커밋을 확인하세요.
버그 수정
- 상태가 복원되고, 상위
SavedStateRegistry
에 실제로 상태를 저장하지 않고save()
가 호출된 후 상태가 다시 복원되는 경우 프로세스 종료 후SavedStateHandle
가 올바르게 복원되지 않는 문제를 수정했습니다. 이를 통해rememberSaveable
과 Navigation Compose의NavHost
간의 상호작용이 수정됩니다. (aosp/2729289 참고)
버전 2.6.1
2023년 3월 22일
androidx.lifecycle:lifecycle-*:2.6.1
이 출시되었습니다. 버전 2.6.1에 포함된 커밋을 확인하세요.
종속 항목 업데이트
lifecycle-viewmodel-savedstate
는 이제 SavedState1.2.1
에 종속됩니다. 추가합니다. (cd7251)- 이제 Lifecycle이 ProfileInstaller
1.3.0
에 종속됩니다. 추가했습니다. (f9d30b)
버전 2.6.0
2023년 3월 8일
androidx.lifecycle:lifecycle-*:2.6.0
이 출시되었습니다. 버전 2.6.0에 포함된 커밋을 확인하세요.
2.5.0 이후 중요 변경사항
- 이제
LiveData
에 명시적 값이LiveData
에서 설정되었는지 나타내는 새로운isInitialized
속성이 포함됩니다. 따라서 어떤 값도 설정된 적이 없으므로null
을 반환하는liveData.value
와 명시적null
값을 구별할 수 있습니다. - 이제
MediatorLiveData
에 초깃값을 설정하는 생성자가 포함됩니다. - 흐름에서 수집하고 수명 주기를 인식하는 방식으로 최신 값을 Compose 상태로 나타내는
collectAsStateWithLifecycle()
의StateFlow
및Flow
에 관한 새 확장 프로그램을 추가했습니다. Lifecycle.launchWhenX
메서드와Lifecycle.whenX
메서드가 지원 중단되었습니다. 일시중지 디스패처 사용 시 리소스 낭비가 발생할 수도 있기 때문입니다.Lifecycle.repeatOnLifecycle
을 사용하는 것이 좋습니다. 일회성 작업 정지에 관한 자세한 내용은 이 설명에서 이 기능이 본질적으로 안전하지 않은 이유를 확인하세요.- Kotlin Conversion - 다수의 Lifecycle 클래스가 Kotlin으로 변환되었습니다. 변환된 모든 클래스는 여전히 이전 버전과의 바이너리 호환성을 유지합니다. 다음 클래스에는 Kotlin으로 작성된 클래스와 소스와 호환되지 않는 변경사항이 있습니다.
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
아래 표에는 새 버전의 수명 주기에 대한 소스 전환이 나와 있습니다.
Lifecycle 2.5 | Lifecycle 2.5 (KTX) | 라이프사이클 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- 이제 Kotlin으로 만든
Observer
onChanged
메서드의 null 허용 여부가 제네릭 유형의 null 허용 여부와 일치합니다.Observer.onChanged()
가 null을 허용하는 유형을 허용하도록 하려면 null을 허용하는 유형으로Observer
를 인스턴스화해야 합니다. - 이러한 클래스도 Kotlin으로 변환되었지만 소스 호환은 유지됩니다.
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
,ProcessLifecycleOwner
버전 2.6.0-rc01
2023년 2월 22일
androidx.lifecycle:lifecycle-*:2.6.0-rc01
이 출시되었습니다. 버전 2.6.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
LiveData.distinctUntilChanged()
확장 프로그램은 이전LiveData
에 설정된 값이 있는 경우 반환된LiveData
의value
를 설정합니다. 관찰 동작은 변경되지 않습니다. 소스LiveData
에서 업데이트된 값은distinctUntilChanged()
에서 반환된LiveData
의 관찰을 시작한 후에만 적용됩니다. 추가했습니다. (Ib482f)
버전 2.6.0-beta01
2023년 2월 8일
androidx.lifecycle:lifecycle-*:2.6.0-beta01
이 출시되었습니다. 버전 2.6.0-beta01에 포함된 커밋을 확인하세요.
Kotlin 변환
- 이제
LifecycleOwner
가 Kotlin으로 작성됩니다. Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항이며, 이제 이전getLifecycle()
함수를 구현하는 대신lifecycle
속성을 재정의해야 합니다. (I75b4b, b/240298691) - 이제
ViewModelStoreOwner
가 Kotlin으로 작성됩니다. Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항이며, 이제 이전getViewModelStore()
함수를 구현하는 대신viewModelStore
속성을 재정의해야 합니다. (I86409, b/240298691) lifecycleScope
필드를 제공하는LifecycleOwner
의 Kotlin 확장 프로그램을lifecycle-runtime-ktx
에서lifecycle-common
아티팩트로 이동했습니다. (I41d78, b/240298691)coroutineScope
필드를 제공하는Lifecycle
의 Kotlin 확장 프로그램을lifecycle-runtime-ktx
에서lifecycle-common
아티팩트로 이동했습니다. (Iabb91, b/240298691)
버전 2.6.0-alpha05
2023년 1월 25일
androidx.lifecycle:lifecycle-*:2.6.0-alpha05
가 출시되었습니다. 버전 2.6.0-alpha05에 포함된 커밋을 확인하세요.
Kotlin 변환
- 이제
Transformations
가 Kotlin으로 작성됩니다. 이는Transformations.map
과 같은 문법을 직접 사용하는 Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항입니다. 이제 Kotlin 코드는 이전에는lifecycle-livedata-ktx
를 사용할 때만 사용할 수 있었던 Kotlin 확장 메서드 문법을 사용해야 합니다. 자바 프로그래밍 언어를 사용할 경우androidx.arch.core.util.Function
메서드를 사용하는 이러한 메서드의 버전은 지원 중단되며 KotlinFunction1
을 사용하는 버전으로 대체됩니다. 이 변경사항에 따라 바이너리 호환성이 유지됩니다. (I8e14f) - 이제
ViewTreeViewModelStoreOwner
가 Kotlin으로 작성됩니다. Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항이며, 이제 이전에 설정된 소유자를 설정하고 찾으려면androidx.lifecycle.findViewTreeViewModelStoreOwner
와androidx.lifecycle.setViewTreeViewModelStoreOwner
의View
에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다. 자바 프로그래밍 언어로 작성된 구현의 경우 바이너리와 호환되고 소스와 호환됩니다. (Ia06d8, Ib22d8, b/240298691) - 이제
HasDefaultViewModelProviderFactory
인터페이스가 Kotlin으로 작성됩니다. 이는 Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항입니다. 상응하는 이전 함수를 구현하는 대신defaultViewModelProviderFactory
및defaultViewModelCreationExtras
속성을 재정의해야 합니다. (Iaed9c, b/240298691) - 이제
Observer
가 Kotlin으로 작성됩니다. 이제onChanged()
메서드는 매개변수에value
라는 이름을 사용합니다. (Iffef2, I4995e, b/240298691) AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
,ProcessLifecycleOwner
가 이제 Kotlin으로 작성됩니다. (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)
버전 2.6.0-alpha04
2023년 1월 11일
androidx.lifecycle:lifecycle-*:2.6.0-alpha04
가 출시되었습니다. 버전 2.6.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
LiveData
에 명시적 값이LiveData
에서 설정되었는지 나타내는 새로운isInitialized
속성이 포함됩니다. 따라서 어떤 값도 설정된 적이 없으므로null
을 반환하는liveData.value
와 명시적null
값을 구별할 수 있습니다. (Ibd018)
API 변경사항
lifecycle-runtime-compose
의collectAsStateWithLifecycle()
API가 더 이상 실험 상태가 아닙니다. (I09d42, b/258835424)Lifecycle.launchWhenX
메서드와Lifecycle.whenX
메서드가 지원 중단되었습니다. 일시중지 디스패처 사용 시 리소스 낭비가 발생할 수도 있기 때문입니다.Lifecycle.repeatOnLifecycle
을 사용하는 것이 좋습니다. (Iafc54, b/248302832)
Kotlin 변환
- 이제
ViewTreeLifecycleOwner
가 Kotlin으로 작성됩니다. 이는 Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항입니다. 이제 이전에 설정된 소유자를 설정하고 찾으려면androidx.lifecycle.findViewTreeLifecycleOwner
와androidx.lifecycle.setViewTreeLifecycleOwner
의View
에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다.lifecycle-runtime-ktx
의 이전 Kotlin 확장 프로그램을 대체합니다. 자바 프로그래밍 언어로 작성된 구현의 경우 바이너리와 호환되고 소스와 호환됩니다. (I8a77a, I5234e, b/240298691) - 이제
LiveDataReactiveStreams
가 Kotlin으로 작성됩니다. 이전에lifecycle-reactivestreams-ktx
에 있던 Kotlin 확장 프로그램은lifecycle-reactivestreams
모듈로 이동했으며 Kotlin으로 작성된 코드의 기본 노출 영역이 되었습니다. 이는 Kotlin 확장 메서드 API를 아직 사용하지 않는 경우 Kotlin으로 작성된 코드에 대해 소스와 호환되지 않는 변경사항입니다. (I2b1b9, I95d22, b/240298691) DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
가 이제 Kotlin으로 작성됩니다. (Iadffd, I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
버그 수정
- 잘못된 클래스 유형으로
get()
을 호출할 때SavedStateHandle
이 더 이상ClassCastException
과 함께 비정상 종료되지 않습니다. (I6ae7c)
버전 2.6.0-alpha03
2022년 10월 24일
androidx.lifecycle:lifecycle-*:2.6.0-alpha03
이 출시되었습니다. 버전 2.6.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- 여러 Lifecycle 모듈 간의 제약 조건이 의도한 대로 작동하지 않는 문제가 수정되었습니다. (I18d0d, b/249686765)
- 이제
LifecycleRegistry.moveToState()
에서 발생하는 오류에는 개발자에게 오류를 일으키는 구성요소를 알리는 유용한 오류 메시지가 포함됩니다. (Idf4b2, b/244910446)
버전 2.6.0-alpha02
2022년 9월 7일
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
가 출시되었습니다. 버전 2.6.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
MediatorLiveData
에 초깃값을 설정하는 생성자가 포함됩니다. (Ib6cc5, b/151244085)
버그 수정
- 이제
Lifecycle
아티팩트에는 모든 상호 종속적인 Lifecycle 아티팩트가 같은 버전을 사용해야 하는 제약 조건이 포함되며, 이에 따라 하나가 업그레이드되면 다른 종속 항목도 자동으로 업그레이드됩니다. (b/242871265) - 이제
FlowLiveData.asFlow()
는 자체Channel
구현을 사용하는 대신callbackFlow
를 만들어 스레드 안전과 컨텍스트 보존을 보장합니다. (I4a8b2, b/200596935) - 이제
FlowLiveData
의asLiveData
함수는 새LiveData
객체를 만들 때StateFlow
의 초깃값을 유지합니다. (I3f530, b/157380488) - 이제
Lifecycle
2.4 이상의 스테이트풀 생성자를 사용하는 경우 Lifecycle2.5.1
:AndroidViewModelFactory
의 맞춤 구현에서create(modelClass)
함수를 올바르게 호출합니다. (I5b315, b/238011621)
버전 2.6.0-alpha01
2022년 6월 29일
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
이 출시되었습니다. 버전 2.6.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 흐름에서 수집하고 수명 주기를 인식하는 방식으로 수집된 값의 마지막 값을 Compose 상태로 표현하는
collectAsStateWithLifecycle
의StateFlow
와Flow
에 관한 새 확장 프로그램을 추가했습니다. 수명 주기가 최소한 특정Lifecycle.State
에 있으면 흐름이 수집되고 새 내보내기가 상태 값으로 설정됩니다. 이때, 수명 주기가Lifecycle.State
미만이면 흐름 수집이 중단되고 상태 값은 업데이트되지 않습니다. (I1856e, b/230557927)
버전 2.5
버전 2.5.1
2022년 7월 27일
androidx.lifecycle:lifecycle-*:2.5.1
이 출시되었습니다. 버전 2.5.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제
AndroidViewModelFactory
맞춤 구현이Lifecycle
2.4 이상에서 스테이트풀(Stateful)AndroidViewModelFactory
생성자를 사용할 때 올바르게create(modelClass)
함수를 호출합니다. (I5b315, b/238011621)
버전 2.5.0
2022년 6월 29일
androidx.lifecycle:lifecycle-*:2.5.0
이 출시되었습니다. 버전 2.5.0에 포함된 커밋을 확인하세요.
2.4.0 이후 중요 변경사항
SavedStateHandle
은 이제LiveData
를 사용하는 대신 값 변경을 모니터링하기 위해 KotlinStateFlow
를 반환하는getStateFlow()
API를 제공합니다.ViewModel CreationExtras - 이제 더 이상 맞춤
ViewModelProvider.Factory
를 작성할 때Application
과SavedStateHandle
의 액세스를 가져오기 위해AndroidViewModelFactory
와AbstractSavedStateViewModelFactory
를 확장하지 않아도 됩니다. 대신 이 필드는create
:create(Class<T>, CreationExtras)
의 새 오버로드를 통해 모든ViewModelProvider.Factory
서브클래스에CreationExtras
로 제공됩니다. 이러한 추가 항목은 Activity1.5.0
및 Fragment1.5.0
을 사용할 때 각각 활동 또는 프래그먼트에 의해 자동으로 제공됩니다.class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }
이제
lifecycle-viewmodel
은viewModelFactory
Kotlin DSL을 제공하며 이를 통해CreationExtras
를 기본 데이터 소스로 사용하여 하나 이상의 람다 이니셜라이저(맞춤 팩토리에서 지원하는ViewModel
클래스당 하나)의 측면에서ViewModelProvider.Factory
를 정의할 수 있습니다.val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
이제
lifecycle-viewmodel-compose
가 맞춤ViewModelProvider.Factory
를 만들지 않고도 람다 팩토리를 사용하여ViewModel
인스턴스를 생성하는viewModel()
API를 제공합니다.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
SavedStateHandle Compose Saver 통합 - 이제
lifecycle-viewmodel-compose
아티팩트에SavedStateHandle.saveable
의 새로운 실험용 API가 포함됩니다. 이 API는 `ViewModel의SavedStateHandle
에서 지원하는 동작과 같이rememberSaveable
을 허용합니다.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
addCloseable()
API 및 새 생성자 오버로드를 추가했습니다. 이로써onCleared()
에서 수동 작업을 하지 않아도ViewModel
이 지워질 때 종료되는 하나 이상의Closeable
객체를ViewModel
에 추가할 수 있습니다.예를 들어, ViewModel에 삽입할 수 있지만 테스트를 통해 제어할 수 있는 코루틴 범위를 만들려면
Closeable
을 구현하는CoroutineScope
을 만들면 됩니다.class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
그런 다음,
viewModelScope
과 동일한 전체 기간을 유지하면서ViewModel
생성자에서 사용할 수 있는 코루틴 범위는 다음과 같습니다.class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
동작 변경사항
- 이제
Lifecycle.State
를INITIALIZED
에서DESTROYED
로 이동하려고 하면Lifecycle
에 관찰자가 연결되어 있는지와 관계없이 항상IllegalStateException
이 발생합니다. - 이제
LifecycleRegistry
는 관찰자가DESTROYED
상태에 도달하면 관찰자를 지웁니다.
버전 2.5.0-rc02
2022년 6월 15일
androidx.lifecycle:lifecycle-*:2.5.0-rc02
가 출시되었습니다. 버전 2.5.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 이전 버전의 compileOnly Lifecycle 종속 항목과 버전 2.5 이상을 함께 사용할 때
ViewModelProvider
가 더 이상 비정상 종료되지 않습니다. (I81a66, b/230454566)
버전 2.5.0-rc01
2022년 5월 11일
androidx.lifecycle:lifecycle-*:2.5.0-rc01
이 출시되었습니다. 버전 2.5.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
null
소스를 전파하는 대신null
소스를 관찰자에 전달할 때MediatorLiveData.addSource()
에서NullPointerException
이 발생합니다. (Ibd0fb, b/123085232)
버전 2.5.0-beta01
2022년 4월 20일
androidx.lifecycle:lifecycle-*:2.5.0-beta01
이 출시되었습니다. 버전 2.5.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 상태를
SavedStateHandle
에 유지하기 위한 키로 속성 이름을 사용하기 위해SavedStateHandle.saveable
속성 위임을 추가했습니다. (I8bb86, b/225014345)
버그 수정
- 여러 백 스택을 사용할 경우 기본 탭이 아닌 하단 탐색 탭에서 하나의
NavHost
를 또 다른NavHost
에 중첩하면IllegalStateException
이 발생하는 문제를 해결했습니다. (I11bd5, b/228865698)
버전 2.5.0-alpha06
2022년 4월 6일
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
이 출시되었습니다. 버전 2.5.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
rememberSaveable
과의 패리티를 위해SavedStateHandle.saveable
에 실험용MutableState
오버로드가 추가되었습니다. (I38cfe, b/224565154)
API 변경사항
CreationExtras
는 이제 봉인 형식이 아닌 추상 형식입니다. (Ib8a7a)
버그 수정
SavedStateHandleController
에 의해 발생하는IllegalStateException: Already attached to lifecycleOwner
오류가 수정되었습니다. (I7ea47, b/215406268)
버전 2.5.0-alpha05
2022년 3월 23일
androidx.lifecycle:lifecycle-*:2.5.0-alpha05
가 출시되었습니다. 버전 2.5.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
lifecycle-viewmodel-compose
모듈이 이제SavedStateHandleSaver
를 제공합니다. 이 API는 실험용으로SavedStateHandle
의 값과rememberSaveable
이 사용하는 저장된 인스턴스 상태와 동일한 인스턴스 상태가 올바르게 통합되었는지 확인합니다. (Ia88b7, b/195689777)
API 변경사항
- 자바에서 Lifecycle 2.3 및 새로운 Lifecycle 버전과의 호환성 문제가 수정되었습니다. (I52c8a, b/219545060)
버그 수정
- 이제
SavedStateViewFactory
가SavedStateRegistryOwner
로 초기화된 경우에도CreationExtras
사용을 지원합니다. 추가 인수가 제공되면 초기화된 인수는 무시됩니다. (I6c43b, b/224844583)
버전 2.5.0-alpha04
2022년 3월 9일
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
가 출시되었습니다. 버전 2.5.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
SavedStateHandle
이 값 변경을 모니터링하기 위해LiveData
를 사용하는 대신 KotlinStateFlow
를 반환하는getStateFlow()
API를 대안으로 제공합니다. (Iad3ab, b/178037961)
버전 2.5.0-alpha03
2022년 2월 23일
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
이 출시되었습니다. 버전 2.5.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
addCloseable()
API 및 새 생성자 오버로드를 추가했습니다. 이로써onCleared()
에서 수동 작업을 하지 않아도ViewModel
이 지워질 때 종료되는 하나 이상의Closeable
객체를ViewModel
에 추가할 수 있습니다. (I55ea0)- 이제
lifecycle-viewmodel
이InitializerViewModelFactory
를 제공합니다. 이로써CreationExtras
를 기본 데이터 소스로 사용하여 특정ViewModel
클래스 처리를 위해 람다를 추가할 수 있습니다. (If58fc, b/216687549) - 이제
lifecycle-viewmodel-compose
가 맞춤ViewModelProvider.Factory
를 만들지 않고도 람다 팩토리를 사용하여ViewModel
인스턴스를 생성하는viewModel()
API를 제공합니다. (I97fbb, b/216688927)
API 변경사항
- 이제
lifecycle-viewmodel-compose
를 통해CreationExtras
로ViewModel
을 만들 수 있습니다. (I08887, b/216688927)
동작 변경사항
- 이제
Lifecycle.State
를INITIALIZED
에서DESTROYED
로 이동하려고 하면Lifecycle
에 관찰자가 연결되어 있는지와 관계없이 항상IllegalStateException
이 발생합니다. (I7c390, b/177924329) - 이제
LifecycleRegistry
는 관찰자가DESTROYED
상태에 도달하면 관찰자를 지웁니다. (I4f8dd, b/142925860)
버전 2.5.0-alpha02
2022년 2월 9일
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
가 출시되었습니다. 버전 2.5.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
SavedStateHandle
및SavedStateViewModelFactory
가 Kotlin으로 변환되었습니다. 두 클래스에서 제네릭의 null 허용 여부가 개선되었습니다. (Ib6ce2, b/216168263, I9647a, b/177667711)- 이제
LiveData
switchMap
함수 매개변수에는 null이 허용되는 출력이 있을 수 있습니다. (I40396, b/132923666) - 이제 이러한 함수를 호출할 때 강제로 결과가 사용되도록
LiveData
-ktx 확장 프로그램이@CheckResult
로 주석 처리됩니다. (Ia0f05, b/207325134)
동작 변경사항
SavedStateHandle
은 이제 지정된 키의 값이 없는 경우 defaultValue를 올바르게 저장합니다. (I1c6ce, b/178510877)
버그 수정
- Lifecycle
2.4.1
에서: Startup 1.1.1을 사용하도록lifecycle-process
를 업데이트했습니다.ProcessLifecycleInitializer
의StartupException
발생을 방지하는 수정 기능이 기본적으로 사용되도록 하기 위함입니다. (Ib01df, b/216490724) - 이제 맞춤
AndroidViewModel
클래스가 잘못된 순서의 매개변수를 갖고 있을 때ViewModel
을 만들려고 할 경우 개선된 오류 메시지가 표시됩니다. (I340f7, b/177667711) - 이제 애플리케이션을 설정하지 않아도
AndroidViewModelFactory
를 사용하여CreationExtras
를 통해 뷰 모델을 만들 수 있습니다. (I6ebef, b/217271656)
버전 2.5.0-alpha01
2022년 1월 26일
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
이 출시되었습니다. 버전 2.5.0-alpha01에 포함된 커밋을 확인하세요.
ViewModel CreationExtras
이 출시에서는 ViewModel
구성 방식을 재구성하기 위한 기반을 마련합니다. 각각 부가 기능을 추가하는 ViewModelProvider.Factory
의 엄격한 서브클래스 집합 대신(AndroidViewModelFactory
를 통한 Application
생성자 매개변수 허용, SavedStateViewModelFactory
와 AbstractSavedStateViewModelFactory
를 통한 SavedStateHandle
생성자 매개변수 허용 등) 새로운 개념인 CreationExtras
를 사용하는 스테이트리스(Stateless) 팩토리라는 세계로 이동합니다. (Ia7343, b/188691010, b/188541057)
이 변경으로 인해 ViewModelProvider
는 더 이상 ViewModelProvider.Factory
의 이전 create(Class<T>)
메서드를 직접 호출하지 않습니다. 대신 create
: create(Class<T>, CreationExtras)
라는 새 오버로드를 호출합니다. 즉, 이제 ViewModelProvider.Factory
인스턴스를 직접 구현하면 다음과 같은 새로운 각 CreationExtras
에 액세스할 수 있습니다.
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: 이String
을 통해ViewModelProvider.get()
에 전달한 맞춤 키에 액세스할 수 있습니다.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
: 이를 통해Application
클래스에 액세스할 수 있습니다.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
: 이를 통해 이 ViewModel을 구성하는 데 사용되는SavedStateRegistryOwner
에 액세스할 수 있습니다.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
: 이를 통해 이 ViewModel을 구성하는 데 사용되는ViewModelStoreOwner
에 액세스할 수 있습니다.SavedStateHandleSupport.DEFAULT_ARGS_KEY
: 이를 통해SavedStateHandle
을 구성하는 데 사용해야 하는 인수의Bundle
에 액세스할 수 있습니다.
이러한 추가 항목은 Activity 1.5.0-alpha01
, Fragment 1.5.0-alpha01
, Navigation 2.5.0-alpha01
을 사용할 때 기본적으로 제공됩니다. 이러한 라이브러리의 이전 버전을 사용하면 CreationExtras
는 비어 있게 됩니다. ViewModelProvider.Factory
의 모든 기존 서브클래스가 이러한 라이브러리의 이전 버전에서 사용한 기존 생성 경로와 향후 사용할 CreationExtras
경로를 모두 지원하도록 재작성되었습니다.
이러한 CreationExtras
를 사용하면 Factory 서브클래스의 엄격한 계층 구조에 의존하지 않고 각 ViewModel
에 필요한 정보만 전달하는 ViewModelProvider.Factory
를 구성할 수 있습니다.
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
SavedStateHandleSupport
의 CreationExtras
에서 createSavedStateHandle()
Kotlin 확장 함수를 사용하여 이를 필요로 하는 ViewModel 하나를 위해서만 SavedStateHandle
을 구성합니다. (Ia6654, b/188541057)
맞춤 CreationExtras
는 ComponentActivity
나 Fragment
에서 getDefaultViewModelCreationExtras()
를 재정의하여 제공할 수 있으므로 지원되는 삽입의 내장 형식으로 맞춤 ViewModelProvider.Factory
에서 사용할 있습니다. 이러한 추가 항목은 직접 ViewModelProvider
와 함께 사용될 때 또는 by viewModels()
및 by activityViewModels()
Kotlin 속성 확장 프로그램을 사용할 때 맞춤 Factory에서 자동으로 사용할 수 있습니다. (I79f2b, b/207012584, b/207012585, b/207012490)
버그 수정
SavedStateHandle
에 제공된 기본값이 특별히SavedStateHandle
에서 삭제되었더라도 프로세스 중단 및 재생성 후에 다시 표시되는 문제를 수정했습니다. 따라서SavedStateHandle
은 더 이상 기본값과 복원된 값을 병합하지 않고 대신 복원된 값만 정보 소스로 사용합니다. (I53a4b)
버전 2.4
버전 2.4.1
2022년 2월 9일
androidx.lifecycle:lifecycle-*:2.4.1
이 출시되었습니다. 버전 2.4.1에 포함된 커밋을 확인하세요.
버그 수정
- Lifecycle
2.5.0-alpha01
에서 백포팅됨:SavedStateHandle
에 제공된 기본값이 특별히SavedStateHandle
에서 삭제되었더라도 프로세스 중단 및 재생성 후에 다시 표시되는 문제를 수정했습니다. 따라서SavedStateHandle
은 더 이상 기본값과 복원된 값을 병합하지 않고 대신 복원된 값만 정보 소스로 사용합니다. (I53a4b) lifecycle-process
는 이제 Androidx Startup 1.1.1에 종속됩니다. 이로 인해ProcessLifecycleInitializer
를 사용하면StartupException
이 발생하는 회귀 문제가 수정되었습니다. (b/216490724)
버전 2.4.0
2021년 10월 27일
androidx.lifecycle:lifecycle-*:2.4.0
이 출시되었습니다. 버전 2.4.0에 포함된 커밋을 확인하세요.
2.3.0 이후 중요 변경사항
@OnLifecycleEvent
가 지원 중단되었습니다. 대신LifecycleEventObserver
또는DefaultLifecycleObserver
를 사용해야 합니다.androidx.lifecycle:lifecycle-viewmodel-compose
라이브러리를 추가했습니다.viewModel()
컴포저블과LocalViewModelStoreOwner
를 제공합니다.- 소스 브레이킹 체인지:
ViewModelProvider
를 Kotlin으로 다시 작성했습니다.ViewModelProvider.Factory.create
메서드는 null 허용 제네릭을 더 이상 허용하지 않습니다.
- 소스 브레이킹 체인지:
- 새 코루틴 API를
androidx.lifecycle:lifecycle-runtime-ktx
에 추가했습니다. Lifecycle.repeatOnLifecycle
은 Lifecycle이 최소한 특정 상태일 때 코루틴에서 코드 블록을 실행하는 API입니다. 블록은 수명 주기가 타겟 상태로 전환되고 타겟 상태를 벗어날 때 취소되고 다시 실행됩니다.Flow.flowWithLifecycle
은 수명 주기가 최소한 특정 상태일 때 업스트림 Flow에서 값을 내보내는 API입니다.DefaultLifecycleObserver
를lifecycle.lifecycle-common-java8
에서lifecycle.lifecycle-common
으로 이동했습니다.lifecycle.lifecycle-common-java8
은lifecycle.lifecycle-common
외에 더 이상 추가 기능을 제공하지 않으므로 종속 항목을lifecycle.lifecycle-common
으로 대체할 수 있습니다.lifecycle-viewmodel-ktx
의 비 코루틴 API를lifecycle-viewmodel
모듈로 이동했습니다.lifecycle-process
가 이제androidx.startup
을 사용하여ProcessLifecycleOwner
를 초기화합니다.이전에는
androidx.lifecycle.ProcessLifecycleOwnerInitializer
를 사용하여 초기화했습니다.이전에 프로세스 수명 주기를 초기화할 때
ContentProvider
에서 사용한tools:node="remove"
를 사용한 경우 대신 다음을 해야 합니다.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
또는
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
버전 2.4.0-rc01
2021년 9월 29일
androidx.lifecycle:lifecycle-*:2.4.0-rc01
이 Lifecycle 2.4.0-beta01에서 변경사항 없이 출시되었습니다. 버전 2.4.0-rc01에 포함된 커밋을 확인하세요.
버전 2.4.0-beta01
2021년 9월 15일
androidx.lifecycle:lifecycle-*:2.4.0-beta01
이 출시되었습니다. 버전 2.4.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
@OnLifecycleEvent
가 지원 중단되었습니다. 대신LifecycleEventObserver
또는DefaultLifecycleObserver
를 사용해야 합니다. (I5a8fa)- DefaultLifecycleObserver를
androidx.lifecycle.lifecycle-common-java8
에서androidx.lifecycle.lifecycle-common
로 이동했습니다.androidx.lifecycle.lifecycle-common-java8
은androidx.lifecycle.lifecycle-common
외에 더 이상 추가 기능을 제공하지 않으므로 종속 항목을androidx.lifecycle.lifecycle-common
으로 대체할 수 있습니다. (I021aa) lifecycle-viewmodel-ktx
의 비 코루틴 API를lifecycle-viewmodel
모듈로 이동했습니다. (I6d5b2)
외부 기여
버전 2.4.0-alpha03
2021년 8월 4일
androidx.lifecycle:lifecycle-*:2.4.0-alpha03
이 출시되었습니다. 버전 2.4.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 소스 브레이킹 체인지: ViewModelProvider를 Kotlin으로 다시 작성했습니다.
ViewModelProvider.Factory.create
메서드는 null 허용 제네릭을 더 이상 허용하지 않습니다. (I9b9f6)
동작 변경사항
Lifecycle.repeatOnLifecycle
:block
은 이제 반복 실행 시 항상 순차적으로 호출됩니다. (Ibab33)
외부 기여
repeatOnLifecycle
문서의 코드 스니펫을 수정해 주신 chao2zhang님께 감사드립니다. #205.
버전 2.4.0-alpha02
2021년 6월 16일
androidx.lifecycle:lifecycle-*:2.4.0-alpha02
가 출시되었습니다. 버전 2.4.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
repeateOnLifecycle
이onStart()
나onResume()
에서 잘못 사용된 경우를 감지하는 새RepeatOnLifecycleWrongUsage
린트 검사를lifecycle-runtime-ktx
에 추가했습니다. (706078, b/187887400)
API 변경사항
LifecycleOwner.addRepeatingJob
API를 삭제했으며, 구조화된 동시 실행을 준수하고 더 쉽게 추론할 수 있는Lifecycle.repeatOnLifecycle
로 대체됩니다. (I4a3a8)- 다른
androidx.startup.Initializer
가 종속 항목으로 사용할 수 있도록ProcessLifecycleInitializer
를 공개합니다. (I94c31)
버그 수정
- 필드에 수정자가 있을 때
NullSafeMutableLiveData
린트 검사에서 발생하던 문제를 수정했습니다. (#147, b/183696616) - 제네릭을 사용할 때
NullSafeMutableLiveData
린트 검사에서 발생하던 또 다른 문제를 수정했습니다. (#161, b/184830263)
외부 기여
NullSafeMutableLiveData
린트 검사를 개선한 maxsav님께 감사드립니다. (#147, b/183696616)NullSafeMutableLiveData
린트 검사를 개선한 kozaxinan님께 감사드립니다. (#161, b/184830263)
버전 2.4.0-alpha01
2021년 3월 24일
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
이 출시되었습니다. 버전 2.4.0-alpha01에 포함된 커밋을 확인하세요.
동작 변경사항
lifecycle-process
가 이제androidx.startup
을 사용하여ProcessLifecycleOwner
를 초기화합니다.이전에는
androidx.lifecycle.ProcessLifecycleOwnerInitializer
를 사용하여 초기화했습니다.이전에 프로세스 수명 주기를 초기화할 때
ContentProvider
에서 사용한tools:node="remove"
를 사용한 경우 대신 다음을 해야 합니다.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
또는
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
API 변경사항
- 수명 주기가 최소한
Lifecycle.repeatOnLifecycle
API를 사용하는 특정 상태일 때 업스트림 Flow에서 값을 방출하는Flow.flowWithLifecycle
API를 추가했습니다. 또한 이는 새로운 API인LifecycleOwner.addRepeatinJob
API를 대신합니다. (I0f4cd)
버그 수정
- Lifecycle 2.3.1에서: 이제
NonNullableMutableLiveData
린트 규칙이 null 허용 여부가 다른 필드 변수를 올바르게 구분할 수 있습니다. (b/169249668)
Lifecycle Viewmodel Compose 버전 1.0.0
버전 1.0.0-alpha07
2021년 6월 16일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
API에 관한 브레이킹 체인지
- 이제
viewModel()
에서ViewModelStoreOwner
를 사용하는 것은 선택사항이므로LocalViewModelStoreOwner
가 아닌 소유자와 더 쉽게 작업할 수 있습니다. 예를 들어, 이제viewModel(navBackStackEntry)
를 사용하여 특정 탐색 그래프와 연결된 ViewModel을 가져올 수 있습니다. (I2628d, b/188693123)
버전 1.0.0-alpha06
2021년 6월 2일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
이 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.
Compose 버전 1.0.0-beta08
과 호환되도록 업데이트되었습니다.
버전 1.0.0-alpha05
2021년 5월 18일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- Compose 버전
1.0.0-beta07
과 호환되도록 업데이트되었습니다.
버그 수정
- ui-test-manifest 및 ui-tooling-data의 AndroidManifest 파일이 이제 Android 12와 호환됩니다. (I6f9de, b/184718994)
버전 1.0.0-alpha04
2021년 4월 7일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
종속 항목 변경사항
- 이 버전을 사용하면
androidx.hilt:hilt-navigation-compose
와androidx.navigation:navigation-compose
가androidx.compose.compiler:compiler:1.0.0-beta04
및androidx.compose.runtime:runtime:1.0.0-beta04
의 종속 항목을 동기화할 수 있습니다. 1.0.0의 경우 컴파일러와 런타임이 일치해야 합니다.
버전 1.0.0-alpha03
2021년 3월 10일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
LocalViewModelStoreOwner.current
가 이제 null을 허용하는ViewModelStoreOwner
를 반환하여 현재 컴포지션에서ViewModelStoreOwner
를 사용할 수 있는지 더 효과적으로 판단합니다.ViewModelStoreOwner
가 설정되어 있지 않으면viewModel()
및NavHost
와 같이ViewModelStoreOwner
가 필요한 API에서 여전히 예외가 발생합니다. (Idf39a)
Lifecycle-Viewmodel-Compose 버전 1.0.0-alpha02
2021년 2월 24일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
LocalViewModelStoreOwner
에는CompositionLocalProvider
와 함께 사용할 수 있는provides
함수가 있습니다. 이 함수는asProvidableCompositionLocal()
API를 대체합니다. (I45d24)
Lifecycle-Viewmodel-Compose 버전 1.0.0-alpha01
2021년 2월 10일
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
viewModel()
컴포저블 및LocalViewModelStoreOwner
를androidx.compose.ui.viewinterop
에서androidx.lifecycle.viewmodel.compose
패키지에 있는 이 아티팩트로 이동했습니다. (I7a374)
버전 2.3.1
Lifecycle 버전 2.3.1
2021년 3월 24일
androidx.lifecycle:lifecycle-*:2.3.1
이 출시되었습니다. 버전 2.3.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제
NonNullableMutableLiveData
린트 규칙이 null 허용 여부가 다른 필드 변수를 올바르게 구분할 수 있습니다. (b/169249668)
버전 2.3.0
버전 2.3.0
2021년 2월 10일
androidx.lifecycle:lifecycle-*:2.3.0
이 출시되었습니다. 버전 2.3.0에 포함된 커밋을 확인하세요.
2.2.0 이후 주요 변경사항
- 비 parcelable 클래스의
SavedStateHandle
지원:SavedStateHandle
이 이제 주어진 키의setSavedStateProvider()
를 호출할 수 있도록 하여 지연 직렬화를 지원하므로SavedStateHandle
에 상태 저장을 요청할 때saveState()
콜백을 가져오는SavedStateProvider
를 제공합니다. 비 parcelable 클래스 저장을 참고하세요. - 수명 주기 동작 시행:
- 이제 LifecycleRegistry는
DESTROYED
를 터미널 상태로 적용합니다. - 이제
LifecycleRegistry
는 메서드가 기본 스레드에서 호출되는지 확인합니다. 이는 항상 활동, 프래그먼트 등의 수명 주기 요구사항이었습니다. 기본 스레드가 아닌 스레드에서 관찰자를 추가하면 런타임 시 비정상 종료를 발견하기가 어려웠습니다. 자체 구성요소에서 소유한LifecycleRegistry
객체의 경우LifecycleRegistry.createUnsafe(...)
를 사용하여 검사를 명시적으로 선택 해제할 수 있습니다. 하지만, 이LifecycleRegistry
를 서로 다른 스레드에서 액세스할 때 적절한 동기화가 설정되었는지 확인해야 합니다.
- 이제 LifecycleRegistry는
- 수명 주기 상태 및 이벤트 도우미:
State
와 전환 방향을 고려하여Event
를 생성하도록downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
의 정적 도우미 메서드가Lifecycle.Event
에 추가되었습니다.Event
에 따라 Lifecycle에서 직접 전환하는State
를 제공하는getTargetState()
메서드가 추가되었습니다. withStateAtLeast
: 수명 주기 상태를 대기하고 상태 변경 지점에서 정지되지 않는 코드 블록을 동기식으로 실행한 후 그 결과로 다시 시작하는Lifecycle.withStateAtLeast
API를 추가했습니다. 이러한 API는 정지된 코드 실행을 허용하지 않고 맞춤 디스패처를 사용하지 않으므로 기존의when*
메서드와 다릅니다. (aosp/1326081)ViewTree
API: 새ViewTreeLifecycleOwner.get(View)
및ViewTreeViewModelStoreOwner.get(View)
API를 사용하면View
인스턴스를 고려하여 포함LifecycleOwner
및ViewModelStoreOwner
를 검색할 수 있습니다. Activity1.2.0
, Fragment1.3.0
, AppCompat 1.3.0-alpha01 이상으로 업그레이드해야 이 항목을 올바르게 채울 수 있습니다.findViewTreeLifecycleOwner
및findViewTreeViewModelStoreOwner
Kotlin 확장 프로그램은lifecycle-runtime-ktx
와lifecycle-viewmodel-ktx
에서 각각 사용할 수 있습니다.LiveData.observe()
Kotlin 확장 프로그램 지원 중단: 람다 구문 사용에 필요한LiveData.observe()
Kotlin 확장 프로그램이 이제 Kotlin 1.4를 사용할 때 필요하지 않으므로 지원 중단되었습니다.
버전 2.3.0-rc01
2020년 12월 16일
androidx.lifecycle:lifecycle-*:2.3.0-rc01
이 출시되었습니다. 버전 2.3.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
SavedStateHandle
의keys()
메서드가 상태가 저장되기 전후에 일관됩니다. 이제 이전에setSavedStateProvider()
와 함께 사용된 키와set()
및getLiveData()
와 함께 사용된 키가 포함됩니다. (aosp/1517919, b/174713653)
외부 기여
- Lifecycle 인식 코루틴을 정지하는 API가 이제
yield()
호출을 더욱 효과적으로 처리합니다. 니클라스 안스만 기어츠님께 감사드립니다. (aosp/1430830, b/168777346)
버전 2.3.0-beta01
2020년 10월 1일
androidx.lifecycle:lifecycle-*:2.3.0-beta01
이 출시되었습니다. 버전 2.3.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 람다 구문을 사용하는 데 필요한
LiveData.observe()
Kotlin 확장 프로그램은 이제 Kotlin 1.4를 사용할 때 필요하지 않으므로 지원 중단되었습니다. (I40d3f)
버그 수정
- Kotlin 1.4를 사용하도록 androidx를 업그레이드합니다. (Id6471, b/165307851, b/165300826)
문서 변경사항
- 지정된 시간 제한 값 변경에 관한 세부정보를 포함하도록
liveData
빌더 및asLiveData()
문서가 업데이트되었습니다. (aosp/1122324)
버전 2.3.0-alpha07
2020년 8월 19일
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
이 출시되었습니다. 버전 2.3.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
NullSafeMutableLiveData
린트 검사에서 발생하는 비정상 종료 문제가 수정되었습니다. (aosp/1395367)
버전 2.3.0-alpha06
2020년 7월 22일
androidx.lifecycle:lifecycle-*:2.3.0-alpha06
이 출시되었습니다. 버전 2.3.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
- 특정
State
와 전환 방향을 고려하여Event
를 생성하도록downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
의 정적 도우미 메서드가Lifecycle.Event
에 추가되었습니다.Event
에 따라 수명 주기에서 직접 전환하는State
를 제공하는getTargetState()
메서드가 추가되었습니다. (I00887) - 수명 주기 상태를 대기하고 상태 변경 지점에서 정지되지 않는 코드 블록을 동기식으로 실행한 후 그 결과로 다시 시작하는
Lifecycle.withStateAtLeast
API를 추가했습니다. 이러한 API는 정지된 코드 실행을 허용하지 않고 맞춤 디스패처를 사용하지 않으므로 기존의when*
메서드와 다릅니다. (aosp/1326081)
동작 변경사항
- 이제 LifecycleRegistry는
DESTROYED
를 터미널 상태로 적용합니다. (I00887) - 이제
LifecycleRegistry
는 메서드가 기본 스레드에서 호출되는지 확인합니다. 이는 항상 활동, 프래그먼트 등의 수명 주기 요구사항이었습니다. 기본 스레드가 아닌 스레드에서 관찰자를 추가하면 런타임 시 비정상 종료를 발견하기가 어려웠습니다. 자체 구성요소에서 소유한LifecycleRegistry
객체의 경우LifecycleRegistry.createUnsafe(...)
를 사용하여 검사를 명시적으로 선택 해제할 수 있습니다. 하지만, 이LifecycleRegistry
를 서로 다른 스레드에서 액세스할 때 적절한 동기화가 설정되었는지 확인해야 합니다. (Ie7280, b/137392809)
버그 수정
NullSafeMutableLiveData
에서 비정상 종료 문제를 해결했습니다. (b/159987480)lifecycle-livedata-core-ktx
(특히NullSafeMutableLiveData
)와 함께 번들로 제공되는 린트 검사의ObsoleteLintCustomCheck
가 수정되었습니다. (b/158699265)
버전 2.3.0-alpha05
2020년 6월 24일
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
가 출시되었습니다. 버전 2.3.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- 이제
LiveData
에서onActive()
또는onInactive()
의 중복 호출을 방지하여 재진입 사례를 더 잘 처리합니다. (b/157840298) - Android 스튜디오 4.1 카나리아 6 이상을 사용할 때 린트 검사가 실행되지 않는 문제가 수정되었습니다. (aosp/1331903)
버전 2.3.0-alpha04
2020년 6월 10일
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
가 출시되었습니다. 버전 2.3.0-alpha04에 포함된 커밋을 확인하세요.
버그 수정
NonNullableMutableLiveData
린트 검사의 비정상 종료 문제가 수정되었습니다. (b/157294666)- 이제
NonNullableMutableLiveData
린트 검사에서 null이 아닌 유형 매개변수를 사용하여MutableLiveData
에null
값이 설정된 경우를 훨씬 더 많이 처리합니다. (b/156002218)
버전 2.3.0-alpha03
2020년 5월 20일
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
이 출시되었습니다. 버전 2.3.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
SavedStateHandle
이 개발자가 주어진 키에setSavedStateProvider()
를 호출하도록 허용하여 지연 직렬화를 지원하므로SavedStateHandle
에 상태 저장을 요청할 때saveState()
콜백을 가져오는SavedStateProvider
를 제공합니다. (b/155106862) - 새로운
ViewTreeViewModelStoreOwner.get(View)
API를 사용하면View
인스턴스가 지정된 포함ViewModelStoreOwner
를 검색할 수 있습니다. 제대로 채우려면 Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
, AppCompat1.3.0-alpha01
로 업그레이드해야 합니다.findViewModelStoreOwner()
Kotlin 확장 프로그램이lifecycle-viewmodel-ktx
에 추가되었습니다. (aosp/1295522)
버그 수정
- Lifecycle
2.3.0-alpha01
에서 출시된MutableLiveData
린트 검사가lifecycle-livedata-core-ktx
아티팩트와 함께 게시되지 않는 문제가 수정되었습니다. (b/155323109)
버전 2.3.0-alpha02
2020년 4월 29일
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
가 출시되었습니다. 버전 2.3.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- Application 인스턴스를 곧바로 사용할 수 없고
AndroidViewModel
지원이 필요하지 않은 사례를 더 효과적으로 지원하기 위해 이제SavedStateViewModelFactory
생성자에 nullApplication
을 전달할 수 있습니다. (aosp/1285740)
버그 수정
- API 28 이하 기기에서 클래스 인증 실패를 방지하여 콜드 스타트 성능을 개선했습니다. (aosp/1282118)
버전 2.3.0-alpha01
2020년 3월 4일
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
이 출시되었습니다. 버전 2.3.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 새로운
ViewTreeLifecycleOwner.get(View)
API를 사용하면View
인스턴스가 지정된 포함LifecycleOwner
를 검색할 수 있습니다. 제대로 채우려면 Activity1.2.0-alpha01
및 Fragment1.3.0-alpha01
로 업그레이드해야 합니다.lifecycle-runtime-ktx
에서findViewTreeLifecycleOwner
Kotlin 확장 프로그램을 사용할 수 있습니다. (aosp/1182361, aosp/1182956) - Kotlin에서 null이 아닌 값으로 정의된
MutableLiveData
에서null
값을 설정할 경우 경고하는 새로운 린트 검사가 추가되었습니다. 이 검사는livedata-core-ktx
또는livedata-ktx
아티팩트 사용 시에 사용할 수 있습니다. (aosp/1154723, aosp/1159092) LifecycleOwner
를 구현하는TestLifecycleOwner
와 스레드로부터 안전한 변경 가능Lifecycle
을 제공하는 새로운lifecycle-runtime-testing
아티팩트를 사용할 수 있습니다. (aosp/1242438)
버그 수정
- 이제
lifecycle-runtime
아티팩트에 고유한 패키지 이름이 있습니다. (aosp/1187196)
버전 2.2.0
ViewModel-Savedstate 버전 2.2.0
2020년 2월 5일
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
이 출시되었습니다. 버전 2.2.0에 포함된 커밋을 확인하세요.
이제 Lifecycle ViewModel SavedState는 다른 Lifecycle 아티팩트와 동일한 버전을 공유합니다. 2.2.0
의 동작은 1.0.0
의 동작과 동일합니다.
버전 2.2.0
2020년 1월 22일
androidx.lifecycle:lifecycle-*:2.2.0
이 출시되었습니다. 버전 2.2.0에 포함된 커밋을 확인하세요.
2.1.0 이후 중요 변경사항
- Lifecycle 코루틴 통합: 새로운
lifecycle-runtime-ktx
아티팩트가 Lifecycle 코루틴과 Kotlin 코루틴 간의 통합을 강화시켜줍니다. 또한 코루틴을 활용할 수 있도록lifecycle-livedata-ktx
도 확장되었습니다. 세부정보는 아키텍처 구성요소와 함께 Kotlin 코루틴 사용을 참고하세요. ViewModelProviders.of()
지원 중단:ViewModelProviders.of()
가 지원 중단되었습니다.Fragment
또는FragmentActivity
를 새로운ViewModelProvider(ViewModelStoreOwner)
생성자에 전달하면 Fragment1.2.0
을 사용할 때의 기능을 그대로 이용할 수 있습니다.lifecycle-extensions
아티팩트 지원 중단: 위의ViewModelProviders.of()
지원 중단과 함께 이 버전에서는lifecycle-extensions
의 마지막 API를 지원 중단으로 표시했기 때문에 이제 이 아티팩트는 완전히 지원 중단된 것으로 간주해야 합니다.lifecycle-extensions
의 향후2.3.0
출시가 없기 때문에lifecycle-extensions
대신 필요한 특정 Lifecycle 아티팩트(예를 들어LifecycleService
를 사용 중일 때는lifecycle-service
,ProcessLifecycleOwner
를 사용 중일 때는lifecycle-process
)를 사용할 것을 권장합니다.- Gradle 증분 주석 프로세서: Lifecycle의 주석 프로세서는 기본적으로 증분입니다.
자바 8 프로그래밍 언어로 작성한 앱에서는
DefautLifecycleObserver
를 대신 사용할 수 있습니다. 자바 7 프로그래밍 언어로 작성한 경우에는LifecycleEventObserver
를 사용할 수 있습니다.
버전 2.2.0-rc03
2019년 12월 4일
androidx.lifecycle:lifecycle-*:2.2.0-rc03
이 출시되었습니다. 버전 2.2.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
ViewModelStore
에 저장된 모의ViewModel
이 나중에 기본 팩토리로 쿼리되는 경우에 발생하는 오류가 해결되었습니다.- 수명 주기 이벤트 동안 동기적으로 호출되는
launchWhenCreated
와 이와 유사한 메서드에서Dispatchers.Main.immediate
의 사용 방법이 수정되었습니다. (aosp/1156203)
외부 기여
- 수정에 도움을 준 앤더스 얄버그 씨께 감사드립니다. (aosp/1156203)
- 인라인 실행 구현 상태를 검토한 Jetbrains의 세볼롯 톨스토피야토프 씨께 감사드립니다.
종속 항목 변경사항
- Lifecycle 확장 프로그램은 이제 Fragment
1.2.0-rc03
에 종속됩니다.
버전 2.2.0-rc02
2019년 11월 7일
androidx.lifecycle:lifecycle-*:2.2.0-rc02
가 출시되었습니다. 버전 2.2.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 타겟 API가 29 미만일 때 API 28 이상을 실행하는 기기에 영향을 주는 라이브러리의 ProGuard 설정 관련 버그가 수정되었습니다. b/142778206을 참조하세요.
버전 2.2.0-rc01
2019년 10월 23일
androidx.lifecycle:lifecycle-*:2.2.0-rc01
이 출시되었습니다. 버전 2.2.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
launchWhenCreated
및 관련 메서드가Dispatchers.Main.immediate
대신Dispatchers.Main
을 사용하여 연결된 수명 주기 메서드보다 한 프레임 늦게 실행되는 문제가 수정되었습니다. aosp/1145596을 참조하세요.
외부 기여
- 수정에 도움을 준 니클라스 안스만 씨께 감사드립니다. aosp/1145596을 참조하세요.
버전 2.2.0-beta01
2019년 10월 9일
androidx.lifecycle:lifecycle-*:2.2.0-beta01
이 출시되었습니다. 버전 2.2.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- Lifecycle 2.2.0-alpha05에 도입되어 Android 10 기기에서
ProcessLifecycleOwner
및 활동의LifecycleOwner
가 시작됨 및 재개됨으로 이동하는 순서 지정과 관련하여 발생하는 회귀 문제가 수정되었습니다. (aosp/1128132) - Lifecycle
2.2.0-alpha05
에 도입되어lifecycle-process
의2.0.0
또는2.1.0
버전을 사용할 때NullPointerException
이 발생하는 회귀 문제가 수정되었습니다. b/141536990을 참조하세요.
버전 2.2.0-alpha05
2019년 9월 18일
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
가 출시되었습니다. 버전 2.2.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- 코루틴 LiveData 빌더의 경합 상태가 수정되었습니다. b/140249349
버전 2.2.0-alpha04
2019년 9월 5일
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
liveData
의lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
및 기본 구현은Dispatchers.Main
대신Dispatchers.Main.immediate
를 사용합니다. b/139740492를 참조하세요.
외부 기여
Dispatchers.Main.immediate
로의 이전에 도움을 준 니클라스 안스만 씨께 감사드립니다. aosp/1106073을 참조하세요.
버전 2.2.0-alpha03
2019년 8월 7일
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
ViewModelStoreOwner
의 구현은 이제HasDefaultViewModelProviderFactory
를 선택적으로 구현하여 기본ViewModelProvider.Factory
를 제공할 수 있습니다. 이 구현은 Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
및 Navigation2.2.0-alpha01
에서 완료되었습니다. aosp/1092370 및 b/135716331을 참조하세요.
API 변경사항
ViewModelProviders.of()
가 지원 중단되었습니다.Fragment
또는FragmentActivity
를 새ViewModelProvider(ViewModelStoreOwner)
생성자에 전달하면 동일한 기능을 실행할 수 있습니다. aosp/1009889를 참조하세요.
버전 2.2.0-alpha02
2019년 7월 2일
androidx.lifecycle:*:2.2.0-alpha02
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
LiveDataScope.initialValue
는liveData
블록의 현재 생성된 값을 추적하는LiveDataScope.latestValue
로 대체되었습니다.timeout
매개변수를Duration
유형으로 수신하는liveData
빌더에 새 오버로드가 추가되었습니다.
버전 2.2.0-alpha01
2019년 5월 7일
androidx.lifecycle:*:2.2.0-alpha01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이 릴리스에는 Lifecycle 및 LiveData를 위한 Kotlin 코루틴 지원을 추가하는 새로운 기능이 추가되었습니다. 자세한 내용은 여기에서 확인할 수 있습니다.
ViewModel-SavedState 버전 1.0.0
버전 1.0.0
2020년 1월 22일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.
1.0.0의 중요 기능
- 새 SavedStateHandle 클래스가 추가되었습니다. 이를 통해
ViewModel
클래스에서 저장된 상태에 액세스하고 참여할 수 있습니다. 이 객체는ViewModel
클래스의 생성자에서 수신할 수 있고, 기본적으로 Fragments 및 AppCompatActivity에서 제공되는 클래스와 팩토리가SavedStateHandle
을 자동으로 주입합니다. - AbstractSavedStateViewModelFactory가 추가되었습니다. 이를 사용하여
ViewModel
의 맞춤 팩토리를 생성하고 그 팩토리에SavedStateHandle
액세스 권한을 부여할 수 있습니다.
ViewModel-Savedstate 버전 1.0.0-rc03
2019년 12월 4일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
이 출시되었습니다. 버전 1.0.0-rc03에 포함된 커밋을 확인하세요.
종속 항목 변경사항
- 이제 Lifecycle ViewModel SavedState는 Lifecycle
2.2.0-rc03
에 종속됩니다.
Viewmodel-Savedstate 버전 1.0.0-rc02
2019년 11월 7일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
가 출시되었습니다. 버전 1.0.0-rc02에 포함된 커밋을 확인하세요.
종속 항목 변경사항
- 이제 Lifecycle
2.2.0-rc02
에 종속됩니다.
ViewModel-SavedState 버전 1.0.0-rc01
2019년 10월 23일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
이 1.0.0-beta01
에서 변경사항 없이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.
ViewModel-Savedstate 버전 1.0.0-beta01
2019년 10월 9일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
Activity.onActivityResult()
의 SavedState ViewModel에 처음 액세스하면IllegalStateException
이 발생하는 문제가 수정되었습니다. (b/139093676)AbstractSavedStateViewModelFactory
를 사용할 때 발생하는IllegalStateException
이 수정되었습니다. b/141225984를 참조하세요.
ViewModel-SavedState 버전 1.0.0-alpha05
2019년 9월 18일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
SavedStateViewModelFactory
는 더 이상AbstractSavedStateViewModelFactory
를 확장하지 않으며SavedStateHandle
은 보유하도록 요청한 ViewModel에서만 생성됩니다. (aosp/1113593)
ViewModel-SavedState 버전 1.0.0-alpha03
2019년 8월 7일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
브레이킹 체인지
lifecycle-viewmodel-savedstate
는 더 이상fragment
에 종속되지 않으므로 관련SavedStateViewModelFactory(Fragment)
및SavedStateViewModelFactory(FragmentActivity)
생성자가 삭제되었습니다. 대신SavedStateViewModelFactory
가 이제 Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
및 Navigation2.2.0-alpha01
의 기본 설정값입니다. b/135716331을 참조하세요.
ViewModel-SavedState 버전 1.0.0-alpha02
2019년 7월 2일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 기본값을 허용하는
SavedStateHandle.getLiveData()
오버로드가 추가되었습니다.
API 변경사항
SavedStateVMFactory
의 이름이SavedStateViewModelFactory
로 변경되었습니다.AbstractSavedStateVMFactory
의 이름이AbstractSavedStateViewModelFactory
로 변경되었습니다.
ViewModel-Savedstate 버전 1.0.0-alpha01
2019년 3월 13일
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
이 출시되었습니다. 이 초기 출시의 전체 커밋 로그는 여기에서 확인할 수 있습니다.
새로운 기능
- 이제
ViewModels
가 savedstate에 기여할 수 있습니다. 그렇게 하려면 새로 도입된 ViewModel의 팩토리SavedStateVMFactory
를 사용하고 ViewModel에SavedStateHandle
객체를 매개변수로 수신하는 생성자가 있어야 합니다.
버전 2.1.0
2.0.0 이후 중요 변경사항
- 수명 주기 이벤트 스트림이 필요한 상황을 위해
LifecycleEventObserver
를 추가했습니다. 숨겨진GenericLifecycleObserver
클래스를 대신하는 공개 API입니다. LiveData.observe
메서드 및Transformations.*
메서드를 위한 ktx 확장을 추가했습니다.- 소스
LiveData
값이 변경될 때까지 값을 내보내지 않는 새로운 LiveData 객체를 생성하는Transformations.distinctUntilChanged
를 추가했습니다. - 확장 속성
ViewModel.viewModelScope
를 추가하여 ViewModel에 코루틴 지원을 추가했습니다.
버전 2.1.0
2019년 9월 5일
androidx.lifecycle:lifecycle-*:2.1.0
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버전 2.1.0-rc01
2019년 7월 2일
androidx.lifecycle:*:2.1.0-rc01
버전은 androidx.lifecycle:*:2.1.0-beta01
에서 변경사항 없이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버전 2.1.0-beta01
2019년 5월 7일
androidx.lifecycle:*:2.1.0-beta01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- Lifecycle이 베타로 전환되었습니다. 이전 알파에서 추가된 api(예: 변환 및 관찰을 위한
liveData
확장 함수, 속성 위임을 통한ViewModel
초기화 등)는 안정화되었으며 변경되지 않습니다.
버전 2.1.0-alpha04
2019년 4월 3일
androidx.lifecycle:*:2.1.0-alpha04
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
- 주요 변경사항:
by viewModels()
및by activityViewModels()
뒤에 오는 기본 API가ViewModelStoreOwner
만 지원하지 않고ViewModelStore
를 직접 지원하도록 변경되었습니다. aosp/932932를 참조하세요.
버전 2.1.0-alpha03
2019년 3월 13일
androidx.lifecycle:*:2.1.0-alpha03
이 출시되었습니다. 이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.
API 변경사항
ViewModelProvider.KeyedFactory
가 삭제되었습니다.ViewModelProvider.Factory
외에 두 번째 인터페이스는 Kotlinby viewmodels {}
의 속성 위임을 새로운 기능으로 포함하도록 작성되지 않았습니다. aosp/914133을 참조하세요.
버전 2.1.0-alpha02
2019년 1월 30일
androidx.lifecycle 2.1.0-alpha02
가 출시되었습니다.
API 변경사항
- 이제
LifecycleRegistry
는 현재 지원 중단된setState()
메서드를 대체하는setCurrentState()
메서드를 포함합니다. aosp/880715를 참조하세요.
버그 수정
- 포함
ViewModelStore
가 삭제될 때 모의ViewModel
인스턴스가 비정상 종료되는 문제가 수정되었습니다. b/122273087
버전 2.1.0-alpha01
2018년 12월 17일
androidx.lifecycle 2.1.0-alpha01
이 출시되었습니다.
새로운 기능
- 수명 주기 이벤트 스트림이 필요한 상황을 위해
LifecycleEventObserver
를 추가했습니다. 숨겨진GenericLifecycleObserver
클래스를 대신하는 공개 API입니다. LiveData.observe
메서드 및Transformations.*
메서드를 위한 ktx 확장을 추가했습니다.Transformations.distinctUntilChanged
메서드를 추가했습니다. 이 메서드는 소스 LiveData 값이 변경될 때까지 값을 내보내지 않는 새로운LiveData
객체를 생성합니다.- ViewModel에서 코루틴 지원: 확장 속성
ViewModel.viewModelScope
를 추가했습니다. create
메서드의key
및Class
를 수신하는 ViewModel의 팩토리ViewModelProvider.KeyedFactory
를 추가했습니다.
버전 2.0.0
버전 2.0.0
2018년 9월 21일
Lifecycle 2.0.0
이 출시되었으며 2.0.0-rc01
에서 ViewModel의 버그가 1개 수정되었습니다.
버그 수정
- 생성자를 잘못 삭제하는 ViewModel proguard 규칙이 수정되었습니다. b/112230489
버전 2.0.0-beta01
2018년 7월 2일
버그 수정
- 하위 인터페이스가 아닌 구현만 유지하도록 LifecycleObserver Proguard 규칙이 수정되었습니다. b/71389427
- 난독화와 축소를 허용하도록 ViewModel Proguard 규칙이 수정되었습니다.
AndroidX 이전 버전
후속 Lifecycle의 AndroidX 이전 버전의 경우 다음 종속 항목을 포함합니다.
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
버전 1.1.1
2018년 3월 21일
사소한 변경사항: android.arch.core.util.Function
을 arch:runtime
에서 arch:common
으로 이동함에 따라 런타임 종속 항목 없이 사용할 수 있습니다. (예: 아래 paging:common
참조)
lifecycle:common
은 lifecycle:runtime
의 종속 항목이므로 이러한 변경은 lifecycle:runtime
에 직접 영향을 주지 않으며 Paging과 마찬가지로 lifecycle:common
에 직접 종속되는 모듈에만 영향을 줍니다.
버전 1.1.0
2018년 1월 22일
패키징 변경사항
이제 새롭고 훨씬 작은 종속 항목을 사용할 수 있습니다.
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)
정적 메서드가 추가되었습니다.