Lifecycle

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

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

아티팩트 공개 버전 출시 후보 베타 버전 알파 버전
lifecycle-* 2.5.1 - - 2.6.0-alpha01
lifecycle-viewmodel-compose 2.5.1 - - 2.6.0-alpha01
이 라이브러리는 2022년 7월 27일에 최종 업데이트되었습니다.

종속 항목 선언

Lifecycle의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

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

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.6.0-alpha01"
        def arch_version = "2.1.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"

        // 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.6.0-alpha01"
        val arch_version = "2.1.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")

        // 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")
    }
    

자바

Groovy

    dependencies {
        def lifecycle_version = "2.6.0-alpha01"
        def arch_version = "2.1.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.6.0-alpha01"
        val arch_version = "2.1.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.6

버전 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 수명 주기 종속 항목과 버전 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에 따라 수명 주기에서 직접 전환하는 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) 정적 메서드가 추가되었습니다.