수명 주기

수명 주기 인식 구성요소는 활동 및 프래그먼트와 같은 다른 구성요소의 수명 주기 상태 변경에 따라 작업을 실행합니다. 이러한 구성요소를 사용하면 잘 구성된 경량의 코드를 만들어 유지 관리가 더 쉬워집니다.

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

아티팩트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
lifecycle-* 2.8.5 - - 2.9.0-alpha02
lifecycle-viewmodel-compose 2.8.5 - - 2.9.0-alpha02
이 라이브러리는 2024년 9월 4일에 최종 업데이트되었습니다.

종속 항목 선언

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)
  • 이제 ViewModelProviderViewModel를 만드는 것이 스레드로부터 안전합니다. @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/3133056b/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/3105647b/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/3079334b/339562627 참고)
  • 속성 위임을 사용하는 ViewModelsaveable 통합은 이제 자동 생성된 키의 일부로 클래스 이름을 사용하므로 여러 클래스에서 동일한 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 아래로 떨어진 후에도 발생하는 클릭 또는 기타 이벤트를 드롭할 수 있는 dropUnlessResumeddropUnlessStarted 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 객체를 추가할 수 있습니다.

  • 이제 키 없이 LifecycleStartEffectLifecycleResumeEffect를 호출하면 오류가 발생하며 이는 이러한 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.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory는 Android에서만 사용할 수 있습니다.
    • 맞춤 팩토리는 ViewModelProvider.Factory에서 확장하고 CreationExtras를 사용하는 create 메서드를 사용하거나 viewModelFactory Kotlin DSL을 사용하는 것이 좋습니다.
  • JVM이 아닌 플랫폼에서 맞춤 팩토리 없이 ViewModelProvider를 사용하면 UnsupportedOperationException이 발생합니다. JVM 플랫폼에서는 맞춤 팩토리가 제공되지 않는 경우 인수가 없는 ViewModel 생성자를 사용하여 호환성을 유지합니다.
  • viewModelScopeDispatchers.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)

알려진 문제

버전 2.8.0-rc01

2024년 5월 1일

androidx.lifecycle:lifecycle-*:2.8.0-rc01이 출시되었습니다. 버전 2.8.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • lifecycle-common 클래스의 기준 프로필이 제대로 패키징되지 않는 문제를 수정했습니다. 이제 lifecycle-runtime AAR에 패키징됩니다. (aosp/3038274b/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를 참조하세요.

버그 수정

  • 많은 거짓양성이 발생하지 않도록 NullSafeMutableLiveData를 리팩터링했습니다. 추가했습니다. (I2d8c1, Iafb18, I03463, I7ecef)

종속 항목 업데이트

버전 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.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory는 Android에서만 사용할 수 있습니다.
    • 맞춤 팩토리는 ViewModelProvider.Factory에서 확장하고 CreationExtras를 사용하는 create 메서드를 사용하거나 viewModelFactory Kotlin DSL을 사용하는 것이 좋습니다.
  • JVM이 아닌 플랫폼에서 맞춤 팩토리 없이 ViewModelProvider를 사용하면 UnsupportedOperationException이 발생합니다. JVM 플랫폼에서는 맞춤 팩토리가 제공되지 않는 경우 인수가 없는 ViewModel 생성자를 사용하여 호환성을 유지합니다.
  • viewModelScopeDispatchers.Main를 사용할 수 없는 플랫폼 (예:EmptyCoroutineContext 있습니다.

동작 변경사항

  • 동일한 clazz: KClass<VM : ViewModel>를 가진 initializer가 이미 추가된 경우 이제 InitializerViewModelFactory (viewModelFactory 빌더 함수 포함)에서 IllegalArgumentException이 발생합니다. 추가했습니다. (Ic3a36)

버그 수정

  • 이제 ViewModel.getCloseable가 중복 키를 처리합니다. key에 이미 연결된 AutoCloseable 리소스가 있으면 이전 리소스가 즉시 교체되고 닫힙니다. 추가했습니다. (Ibeb67)
  • 이제 ViewModelviewModelScope 액세스가 스레드로부터 안전합니다. 추가했습니다. (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 아래로 떨어진 후에도 발생하는 클릭 또는 기타 이벤트를 드롭할 수 있는 dropUnlessResumeddropUnlessStarted 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 변경사항

  • 이제 키 없이 LifecycleStartEffectLifecycleResumeEffect를 호출하면 오류가 발생하며 이는 이러한 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에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 ViewModelgetCloseable()를 통해 검색할 수 있는 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에서 제공하는 코루틴과 같은 코루틴 내에서 안전하게 사용할 수 있습니다.
  • 이제 mapswitchMapLiveData 확장 프로그램이 distinctUntilChanged의 동작을 미러링합니다. LiveDatavalue가 설정되어 있으면 map/switchMap 함수가 즉시 호출되어 반환된 LiveDatavalue를 채웁니다. 이렇게 하면 초깃값이 첫 번째 컴포지션의 일부로 설정되지만 (observeAsState()와 함께 사용될 때) 관찰 동작은 변경되지 않습니다. 소스 LiveData의 업데이트 값은 여전히 LiveData 관찰을 시작한 후에만 적용됩니다.
  • 이 출시에서는 프로세스 종료 및 재생성 후 SavedStateHandle가 맞춤 Parcelable 클래스를 제대로 복원하지 않는 문제를 해결합니다. Android 프레임워크에서 손실되는 유형 정보로 인해 맞춤 Parcelable의 배열에는 추가 작업 (올바른 유형의 유형이 지정된 배열을 수동으로 생성)이 필요하며 get, getLiveData, getStateFlow 관련 문서에서는 이제 이 제한을 구체적으로 설명합니다.
  • LifecycleObserver와 연결된 proguard Keep 규칙이 삭제되었습니다. 즉, 리플렉션을 통해 API를 사용하려는 Proguard 코드 (예: 지원 중단된 @OnLifecycleEvent 주석 사용)는 특정 사용 사례를 위한 자체 Keep 규칙을 제공해야 합니다.

수명 주기 이벤트 관측 가능성

  • LifecycleEventObserver 사용의 대안으로 이제 Lifecycle.asFlow() 확장 메서드를 통해 Lifecycle.EventFlow를 관찰할 수 있습니다.
  • 이제 Jetpack Compose 사용자는 LifecycleEventEffect를 사용하여 Lifecycle.Event에 기반한 Compose 부작용을 실행할 수 있습니다.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose 사용자는 LifecycleStartEffectLifecycleResumeEffect를 사용하여 이벤트 (각각 중지에서 시작, 재개에서 일시중지)을 처리할 수 있습니다. 이 API는 DisposableEffect에 있는 API를 미러링하며, 상태가 위로 올라가면 변경한 내용을 다시 아래로 내려가야 하는 경우에 적합합니다.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

자세한 내용은 수명 주기 이벤트에서 코드 실행을 참고하세요.

수명 주기 상태 관측 가능성

  • 이제 value가 현재 Lifecycle.StateStateFlow을 반환하는 Lifecycle.currentStateFlow 속성을 통해 현재 Lifecycle.State를 관찰할 수 있습니다.
  • Jetpack Compose 사용자는 Lifecycle.currentStateAsState() 확장 프로그램을 사용하여 Lifecycle.State를 Compose State로 직접 노출할 수 있습니다. 이는 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가 변경되면 LifecycleStartEffectLifecycleResumeEffect가 효과 블록을 올바르게 삭제하고 다시 만듭니다. 추가했습니다. (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 필드를 사용하여 TestLifecycleOwnerLifecycle.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에 설정된 값이 있는 경우 반환된 LiveDatavalue를 설정하므로 Jetpack Compose에서 결과 LiveData를 사용할 때 초기 컴포지션에서 올바른 상태가 유지됩니다. 추가했습니다. (I91d2b, b/269479952)
  • 이제 ViewModel가 이미 onCleared() 호출을 수신한 경우 ViewModeladdCloseable()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.StateLifecycle.currentStateFlow를 통해 Compose에서 관찰할 수 있으며, 이는 value가 현재 Lifecycle.StateStateFlow을 반환합니다. 추가했습니다. (Ib212d, b/209684871)
  • 이제 Lifecycle.EventLifecycle.asFlow().를 사용하여 Flow로 관찰할 수 있습니다. (If2c0f, b/176311030)
  • Lifecycle.Event.ON_RESUMELifecycle.Event.ON_PAUSE 이벤트 콜백에 기반하여 Compose SideEffect를 실행하도록 LifecycleResumeEffect API를 추가했습니다. 추가했습니다. (I60386, b/235529345)
  • Lifecycle.Event.ON_STARTLifecycle.Event.ON_STOP 이벤트 콜백에 따라 Compose SideEffect를 실행하도록 LifecycleStartEffect API를 추가했습니다. 추가했습니다. (I5a8d1, b/235529345)
  • Lifecycle.Event에 기반하여 Compose SideEffect를 실행하도록 LifecycleEventEffect API를 추가했습니다. 추가했습니다. (Ic9794, b/235529345)
  • Lifecycle.State를 Compose State로 직접 노출하도록 Lifecycle.collectAsState() 확장 프로그램이 추가되었습니다. 이는 lifecycle.currentStateFlow.collectAsState()와 동일하며 더 짧은 대안입니다. 추가했습니다. (I11015, b/235529345)

버그 수정

  • 이제 LiveData.distinctUntilChanged() 확장 프로그램은 이전 LiveData에 설정된 값이 있는 경우 반환된 LiveDatavalue를 설정합니다. 관찰 동작은 변경되지 않습니다. 소스 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에 포함된 커밋을 확인하세요.

종속 항목 업데이트

버전 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()StateFlowFlow에 관한 새 확장 프로그램을 추가했습니다.
  • 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에 설정된 값이 있는 경우 반환된 LiveDatavalue를 설정합니다. 관찰 동작은 변경되지 않습니다. 소스 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 메서드를 사용하는 이러한 메서드의 버전은 지원 중단되며 Kotlin Function1을 사용하는 버전으로 대체됩니다. 이 변경사항에 따라 바이너리 호환성이 유지됩니다. (I8e14f)
  • 이제 ViewTreeViewModelStoreOwner가 Kotlin으로 작성됩니다. Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항이며, 이제 이전에 설정된 소유자를 설정하고 찾으려면 androidx.lifecycle.findViewTreeViewModelStoreOwnerandroidx.lifecycle.setViewTreeViewModelStoreOwnerView에서 Kotlin 확장 메서드를 직접 가져와서 사용해야 합니다. 자바 프로그래밍 언어로 작성된 구현의 경우 바이너리와 호환되고 소스와 호환됩니다. (Ia06d8, Ib22d8, b/240298691)
  • 이제 HasDefaultViewModelProviderFactory 인터페이스가 Kotlin으로 작성됩니다. 이는 Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항입니다. 상응하는 이전 함수를 구현하는 대신 defaultViewModelProviderFactorydefaultViewModelCreationExtras 속성을 재정의해야 합니다. (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-composecollectAsStateWithLifecycle() API가 더 이상 실험 상태가 아닙니다. (I09d42, b/258835424)
  • Lifecycle.launchWhenX 메서드와 Lifecycle.whenX 메서드가 지원 중단되었습니다. 일시중지 디스패처 사용 시 리소스 낭비가 발생할 수도 있기 때문입니다. Lifecycle.repeatOnLifecycle을 사용하는 것이 좋습니다. (Iafc54, b/248302832)

Kotlin 변환

  • 이제 ViewTreeLifecycleOwner가 Kotlin으로 작성됩니다. 이는 Kotlin으로 작성된 클래스에 대해 소스와 호환되지 않는 변경사항입니다. 이제 이전에 설정된 소유자를 설정하고 찾으려면 androidx.lifecycle.findViewTreeLifecycleOwnerandroidx.lifecycle.setViewTreeLifecycleOwnerView에서 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)
  • 이제 FlowLiveDataasLiveData 함수는 새 LiveData 객체를 만들 때 StateFlow의 초깃값을 유지합니다. (I3f530, b/157380488)
  • 이제 Lifecycle 2.4 이상의 스테이트풀 생성자를 사용하는 경우 Lifecycle 2.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 상태로 표현하는 collectAsStateWithLifecycleStateFlowFlow에 관한 새 확장 프로그램을 추가했습니다. 수명 주기가 최소한 특정 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를 사용하는 대신 값 변경을 모니터링하기 위해 Kotlin StateFlow를 반환하는 getStateFlow() API를 제공합니다.

  • ViewModel CreationExtras - 이제 더 이상 맞춤 ViewModelProvider.Factory를 작성할 때 ApplicationSavedStateHandle의 액세스를 가져오기 위해 AndroidViewModelFactoryAbstractSavedStateViewModelFactory를 확장하지 않아도 됩니다. 대신 이 필드는 create: create(Class<T>, CreationExtras)의 새 오버로드를 통해 모든 ViewModelProvider.Factory 서브클래스에 CreationExtras로 제공됩니다. 이러한 추가 항목은 Activity 1.5.0Fragment 1.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-viewmodelviewModelFactory 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.StateINITIALIZED에서 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)

버그 수정

  • 이제 SavedStateViewFactorySavedStateRegistryOwner로 초기화된 경우에도 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를 사용하는 대신 Kotlin StateFlow를 반환하는 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-viewmodelInitializerViewModelFactory를 제공합니다. 이로써 CreationExtras를 기본 데이터 소스로 사용하여 특정 ViewModel 클래스 처리를 위해 람다를 추가할 수 있습니다. (If58fc, b/216687549)
  • 이제 lifecycle-viewmodel-compose가 맞춤 ViewModelProvider.Factory를 만들지 않고도 람다 팩토리를 사용하여 ViewModel 인스턴스를 생성하는 viewModel() API를 제공합니다. (I97fbb, b/216688927)

API 변경사항

  • 이제 lifecycle-viewmodel-compose를 통해 CreationExtrasViewModel을 만들 수 있습니다. (I08887, b/216688927)

동작 변경사항

  • 이제 Lifecycle.StateINITIALIZED에서 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 변경사항

  • SavedStateHandleSavedStateViewModelFactory가 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를 업데이트했습니다. ProcessLifecycleInitializerStartupException 발생을 방지하는 수정 기능이 기본적으로 사용되도록 하기 위함입니다. (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 생성자 매개변수 허용, SavedStateViewModelFactoryAbstractSavedStateViewModelFactory를 통한 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
    }
}

SavedStateHandleSupportCreationExtras에서 createSavedStateHandle() Kotlin 확장 함수를 사용하여 이를 필요로 하는 ViewModel 하나를 위해서만 SavedStateHandle을 구성합니다. (Ia6654, b/188541057)

맞춤 CreationExtrasComponentActivityFragment에서 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입니다.
  • DefaultLifecycleObserverlifecycle.lifecycle-common-java8에서 lifecycle.lifecycle-common으로 이동했습니다. lifecycle.lifecycle-common-java8lifecycle.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-java8androidx.lifecycle.lifecycle-common 외에 더 이상 추가 기능을 제공하지 않으므로 종속 항목을 androidx.lifecycle.lifecycle-common으로 대체할 수 있습니다. (I021aa)
  • lifecycle-viewmodel-ktx의 비 코루틴 API를 lifecycle-viewmodel 모듈로 이동했습니다. (I6d5b2)

외부 기여

  • ViewModel 문서의 오타를 수정해 주신 dmitrilc님께 감사드립니다. (#221)

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

새로운 기능

  • repeateOnLifecycleonStart()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)

외부 기여

버전 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-composeandroidx.navigation:navigation-composeandroidx.compose.compiler:compiler:1.0.0-beta04androidx.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() 컴포저블 및 LocalViewModelStoreOwnerandroidx.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를 서로 다른 스레드에서 액세스할 때 적절한 동기화가 설정되었는지 확인해야 합니다.
  • 수명 주기 상태 및 이벤트 도우미: 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 인스턴스를 고려하여 포함 LifecycleOwnerViewModelStoreOwner를 검색할 수 있습니다. Activity 1.2.0, Fragment 1.3.0, AppCompat 1.3.0-alpha01 이상으로 업그레이드해야 이 항목을 올바르게 채울 수 있습니다. findViewTreeLifecycleOwnerfindViewTreeViewModelStoreOwner Kotlin 확장 프로그램은 lifecycle-runtime-ktxlifecycle-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에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 SavedStateHandlekeys() 메서드가 상태가 저장되기 전후에 일관됩니다. 이제 이전에 setSavedStateProvider()와 함께 사용된 키와 set()getLiveData()와 함께 사용된 키가 포함됩니다. (aosp/1517919, b/174713653)

외부 기여

버전 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)

버그 수정

문서 변경사항

  • 지정된 시간 제한 값 변경에 관한 세부정보를 포함하도록 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이 아닌 유형 매개변수를 사용하여 MutableLiveDatanull 값이 설정된 경우를 훨씬 더 많이 처리합니다. (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를 검색할 수 있습니다. 제대로 채우려면 Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05, AppCompat 1.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 생성자에 null Application을 전달할 수 있습니다. (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를 검색할 수 있습니다. 제대로 채우려면 Activity 1.2.0-alpha01Fragment 1.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) 생성자에 전달하면 Fragment 1.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-process2.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이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 liveDatalifecycleScope, 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이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

API 변경사항

  • ViewModelProviders.of()가 지원 중단되었습니다. Fragment 또는 FragmentActivity를 새 ViewModelProvider(ViewModelStoreOwner) 생성자에 전달하면 동일한 기능을 실행할 수 있습니다. aosp/1009889를 참조하세요.

버전 2.2.0-alpha02

2019년 7월 2일

androidx.lifecycle:*:2.2.0-alpha02이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

API 변경사항

  • LiveDataScope.initialValueliveData 블록의 현재 생성된 값을 추적하는 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-rc011.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가 이제 Activity 1.1.0-alpha02, Fragment 1.2.0-alpha02Navigation 2.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 외에 두 번째 인터페이스는 Kotlin by 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 메서드의 keyClass를 수신하는 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.Functionarch:runtime에서 arch:common으로 이동함에 따라 런타임 종속 항목 없이 사용할 수 있습니다. (예: 아래 paging:common 참조)

lifecycle:commonlifecycle: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 변경사항

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