Lifecycle

ライフサイクル対応コンポーネントは、別のコンポーネント(アクティビティやフラグメントなど)のライフサイクル ステータスの変化に対応してアクションを実行します。これらのコンポーネントを使用することで、適切に整理されメンテナンスが容易な軽量のコードを作成できます。

androidx.lifecycle グループ内のすべてのアーティファクトのリストを以下に示します。

アーティファクト 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
lifecycle-* 2.5.1 - - 2.6.0-alpha03
lifecycle-viewmodel-compose 2.5.1 - - 2.6.0-alpha03
このライブラリの最終更新日: 2022 年 10 月 24 日

依存関係の宣言

Lifecycle への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.5.1"
        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.5.1"
        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")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.5.1"
        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.5.1"
        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 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 2.6

バージョン 2.6.0-alpha03

2022 年 10 月 24 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 がリリースされました。バージョン 2.6.0-alpha03 に含まれる commit については、こちらをご覧ください

バグの修正

  • 異なる Lifecycle モジュール間の制約が意図したとおりに動作しない問題を修正しました。(I18d0db/249686765
  • LifecycleRegistry.moveToState() がスローするエラーに、エラーの原因となるコンポーネントをデベロッパーに知らせるためのより有用なエラー メッセージが含まれるようになりました。(Idf4b2b/244910446

バージョン 2.6.0-alpha02

2022 年 9 月 7 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 がリリースされました。バージョン 2.6.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • MediatorLiveData に初期値を設定するためのコンストラクタが追加されました。(Ib6cc5b/151244085

バグの修正

  • 依存関係のあるすべての Lifecycle アーティファクトで必ず同じバージョンが使用されるように、Lifecycle のアーティファクトに制約が追加されました。それによって、依存関係にあるアーティファクトのいずれかがアップグレードされると、自動的に他もすべてアップグレードされるようになりました。(b/242871265
  • FlowLiveData.asFlow() は、独自の Channel 実装を使用する代わりに callbackFlow を作成することで、スレッドセーフを確保し、コンテキストを保持できるようになりました。(I4a8b2b/200596935
  • FlowLiveDataasLiveData 関数が、新しい LiveData オブジェクトの作成時に StateFlow の初期値を保持するようになりました。(I3f530b/157380488
  • Lifecycle 2.5.1 以降: AndroidViewModelFactory のカスタム実装で、ステートフル コンストラクタを Lifecycle 2.4 以降で使用している際に、create(modelClass) 関数を正しく呼び出せるようになりました。(I5b315b/238011621

バージョン 2.6.0-alpha01

2022 年 6 月 29 日

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 がリリースされました。バージョン 2.6.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • collectAsStateWithLifecycleStateFlowFlow に、フローから収集してライフサイクル対応の方法で Compose の状態として最新の値を表す拡張機能を追加しました。フローが収集されて、ライフサイクルが少なくとも特定の Lifecycle.State に達すると新しい出力が状態の値に設定されます。ライフサイクルが Lifecycle.State を下回ると、フローの収集は停止し、状態の値は更新されなくなります。(I1856eb/230557927

バージョン 2.5

バージョン 2.5.1

2022 年 7 月 27 日

androidx.lifecycle:lifecycle-*:2.5.1 がリリースされました。バージョン 2.5.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • Lifecycle 2.4 以上でステートフルの AndroidViewModelFactory コンストラクタを使用している場合、AndroidViewModelFactory のカスタムの実装が create(modelClass) 関数を正しく呼び出すようになりました。(I5b315b/238011621

バージョン 2.5.0

2022 年 6 月 29 日

androidx.lifecycle:lifecycle-*:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください

2.4.0 以降の重要な変更

  • LiveData を使用する代わりに値の変更をモニタリングする Kotlin StateFlow を返す getStateFlow() API を SavedStateHandle が提供するようになりました。

  • ViewModel CreationExtras - カスタムの ViewModelProvider.Factory を記述する際、AndroidViewModelFactory または AbstractSavedStateViewModelFactory を拡張してそれぞれ Application または SavedStateHandle へのアクセス権を取得する必要がなくなりました。代わりに、これらのフィールドは、create の新しいオーバーロードである create(Class<T>, CreationExtras) を介して CreationExtras としてすべての ViewModelProvider.Factory サブクラスに提供されます。このようなエクストラは、Activity 1.5.0 または Fragment 1.5.0 を使用している場合にそれぞれ Activity または Fragment から自動的に提供されます。

    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 をメインのデータソースとして使用して、1 つ以上のラムダ初期化子(カスタム ファクトリがサポートする特定の ViewModel クラスごとに 1 つ)に関して 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 がラムダ ファクトリを受け取る viewModel() API を提供するようになりました。これにより、カスタムの ViewModelProvider.Factory を作成せずに、ViewModel インスタンスを作成できるようになります。

    // 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 セーバー統合 - lifecycle-viewmodel-compose アーティファクトが SavedStateHandle.saveable に新しい試験運用版 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 と新しいコンストラクタ オーバーロードを追加しました。これにより、ViewModel がクリアされるときに閉じられる 1 つ以上の Closeable オブジェクトを ViewModel に追加できるようになり、onCleared() で手動の作業が不要になります。

    たとえば、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 に含まれる commit については、こちらをご覧ください

バグの修正

  • compileOnly Lifecycle 依存関係の以前のバージョンとバージョン 2.5 以降を混在させたときに ViewModelProvider がクラッシュしなくなりました。(I81a66b/230454566

バージョン 2.5.0-rc01

2022 年 5 月 11 日

androidx.lifecycle:lifecycle-*:2.5.0-rc01 がリリースされました。バージョン 2.5.0-rc01 に含まれる commit については、こちらをご覧ください。

バグの修正

  • MediatorLiveData.addSource()null ソースを渡すときに null ソースをオブザーバーに伝播するのではなく、NullPointerException をスローするようになりました。(Ibd0fbb/123085232

バージョン 2.5.0-beta01

2022 年 4 月 20 日

androidx.lifecycle:lifecycle-*:2.5.0-beta01 がリリースされました。バージョン 2.5.0-beta01 に含まれる commit については、こちらをご覧ください

API の変更

  • 状態を SavedStateHandle に維持するためのキーとしてプロパティ名を使用する SavedStateHandle.saveable プロパティ デリゲートを追加しました。(I8bb86b/225014345

バグの修正

  • メインでない下部のナビゲーション タブで別の NavHost 内に 1 つの NavHost をネストすると、複数のバックスタックを使用する場合に IllegalStateException が発生する問題を修正しました。(I11bd5b/228865698

バージョン 2.5.0-alpha06

2022 年 4 月 6 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha06 がリリースされました。バージョン 2.5.0-alpha06 に含まれる commit については、こちらをご覧ください

新機能

  • rememberSaveable と同等の機能を実現するため、試験運用版の MutableState のオーバーロードを SavedStateHandle.saveable に追加しました。(I38cfeb/224565154

API の変更

  • CreationExtras がシールクラスではなく抽象クラスになりました。(Ib8a7a

バグの修正

  • SavedStateHandleController によって引き起こされる IllegalStateException: Already attached to lifecycleOwner エラーを修正しました。(I7ea47b/215406268

バージョン 2.5.0-alpha05

2022 年 3 月 23 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 がリリースされました。バージョン 2.5.0-alpha05 に含まれる commit については、こちらをご覧ください

新機能

  • lifecycle-viewmodel-compose モジュールで SavedStateHandleSaver が提供されるようになりました。この試験運用版 API は、SavedStateHandle の値が、rememberSaveable が使用するものと同じ保存済みインスタンスの状態と正しく統合されるようにします。(Ia88b7b/195689777

API の変更

  • Java での Lifecycle 2.3 と Lifecycle のそれより新しいバージョンとの互換性に関する問題を修正しました。(I52c8ab/219545060

バグの修正

  • SavedStateViewFactory が、SavedStateRegistryOwner で初期化された場合でも CreationExtras を使用できるようになりました。エクストラが指定されている場合、初期化された引数は無視されます。(I6c43bb/224844583

バージョン 2.5.0-alpha04

2022 年 3 月 9 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha04 がリリースされました。バージョン 2.5.0-alpha04 に含まれる commit については、こちらをご覧ください

API の変更

  • LiveData を使用する代わりに値の変更をモニタリングする Kotlin StateFlow を返す getStateFlow() API を SavedStateHandle が提供するようになりました。(Iad3abb/178037961

バージョン 2.5.0-alpha03

2022 年 2 月 23 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • addCloseable() API と新しいコンストラクタ オーバーロードを追加しました。これにより、ViewModel がクリアされるときに閉じられる 1 つ以上の Closeable オブジェクトを ViewModel に追加できるようになり、onCleared() で手動の作業が不要になります。(I55ea0
  • lifecycle-viewmodelInitializerViewModelFactory を提供するようになりました。これにより、CreationExtras をメインのデータソースとして使用して、特定の ViewModel クラスを処理するためのラムダを追加できるようになります。(If58fcb/216687549
  • lifecycle-viewmodel-compose がラムダ ファクトリを受け取る viewModel() API を提供するようになりました。これにより、カスタムの ViewModelProvider.Factory を作成せずに、ViewModel インスタンスを作成できるようになります。(I97fbbb/216688927

API の変更

  • lifecycle-viewmodel-compose から CreationExtrasViewModel を作成できるようになりました。(I08887b/216688927

動作の変更

  • Lifecycle.StateINITIALIZED から DESTROYED に変更しようとすると、Lifecycle にオブザーバーがアタッチされているかどうかにかかわらず、常に IllegalStateException がスローされるようになりました。(I7c390b/177924329
  • LifecycleRegistry は、オブザーバーが DESTROYED 状態に達したときにオブザーバーをクリアするようになりました。(I4f8ddb/142925860

バージョン 2.5.0-alpha02

2022 年 2 月 9 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 がリリースされました。バージョン 2.5.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • SavedStateHandleSavedStateViewModelFactory が Kotlin に変換されました。これにより、両クラスのジェネリクスの null 可能性が改善されました。(Ib6ce2b/216168263I9647ab/177667711
  • LiveData switchMap 関数パラメータの出力が null 許容型になりました。(I40396b/132923666
  • LiveData -ktx 拡張機能に @CheckResult アノテーションが付けられ、これらの関数を呼び出すときに結果を使用することが強制されるようになりました。(Ia0f05b/207325134

動作の変更

  • SavedStateHandle が、指定されたキーの値が存在しない場合に defaultValue を適切に保存するようになりました。(I1c6ceb/178510877

バグの修正

  • Lifecycle 2.4.1 以降: ProcessLifecycleInitializerStartupException をスローしないようにする修正をデフォルトで利用できるようにするため、Startup 1.1.1 に依存するように lifecycle-process を更新しました。(Ib01dfb/216490724
  • パラメータの順序が誤っているカスタム AndroidViewModel クラスで ViewModel を作成しようとするときのエラー メッセージを改善しました。(I340f7b/177667711
  • アプリを設定せずに、AndroidViewModelFactory を使用して CreationExtras を介してビューモデルを作成できるようになりました。(I6ebefb/217271656

バージョン 2.5.0-alpha01

2022 年 1 月 26 日

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください

ViewModel CreationExtras

今回のリリースでは、ViewModel の作成方法を再構築するための土台作りを行いました。これにより、それぞれが機能を追加する ViewModelProvider.Factory のサブクラスの厳密なセット(AndroidViewModelFactory による Application コンストラクタ パラメータの許可、SavedStateViewModelFactoryAbstractSavedStateViewModelFactory による SavedStateHandle コンストラクタ パラメータの許可など)を提供する代わりに、CreationExtras という新しいコンセプトに基づくステートレスなファクトリの世界に移行しようとしています。(Ia7343b/188691010b/188541057

この変更により、ViewModelProviderViewModelProvider.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-alpha01Fragment 1.5.0-alpha01Navigation 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
    }
}

SavedStateHandleSupportCreationExtrascreateSavedStateHandle() Kotlin 拡張関数を使用して、それを必要とする 1 つの ViewModel に対してのみ SavedStateHandle を作成します。(Ia6654b/188541057

カスタムの CreationExtras を作成するには、ComponentActivity または FragmentgetDefaultViewModelCreationExtras() をオーバーライドすることにより、組み込み型のアシスト付きインジェクションとしてカスタム ViewModelProvider.Factory 向けに使えるようにします。このようなエクストラは、ViewModelProvider で直接使用する場合、または by viewModels()by activityViewModels() の Kotlin プロパティ拡張を使用する場合に、自動的にカスタム Factory で利用できるようになります。(I79f2bb/207012584b/207012585b/207012490

バグの修正

  • SavedStateHandle に指定されたデフォルト値が、SavedStateHandle から明確に削除された場合でも、プロセスの終了および再作成後に再表示される問題を修正しました。その結果、SavedStateHandle がデフォルト値と復元値を結合することはなくなり、復元値のみを信頼できる情報源として使用するようになります。(I53a4b

バージョン 2.4

バージョン 2.4.1

2022 年 2 月 9 日

androidx.lifecycle:lifecycle-*:2.4.1 がリリースされました。バージョン 2.4.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • Lifecycle 2.5.0-alpha01 からのバックポート: SavedStateHandle に指定されたデフォルト値が、SavedStateHandle から明確に削除された場合でも、プロセスの終了と再作成の後に再表示される問題を修正しました。その結果、SavedStateHandle がデフォルト値と復元値を結合することはなくなり、復元値のみを信頼できる情報源として使用するようになります。(I53a4b
  • lifecycle-processAndroidx Startup 1.1.1 に依存するようになり、ProcessLifecycleInitializer を使用すると StartupException が発生する回帰が修正されました。(b/216490724

バージョン 2.4.0

2021 年 10 月 27 日

androidx.lifecycle:lifecycle-*:2.4.0 がリリースされました。バージョン 2.4.0 に含まれる commit については、こちらをご覧ください

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-processandroidx.startup を使用して ProcessLifecycleOwner を初期化するようになりました。

    以前は、これは androidx.lifecycle.ProcessLifecycleOwnerInitializer によって行われていました。

    過去にプロセスのライフサイクルの初期化に使用されていた ContentProvidertools: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 に含まれる commit については、こちらをご覧ください

バージョン 2.4.0-beta01

2021 年 9 月 15 日

androidx.lifecycle:lifecycle-*:2.4.0-beta01 がリリースされました。バージョン 2.4.0-beta01 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください

新機能

  • onStart() または onResume()repeateOnLifecycle が正しく使用されていないことを検出する、新しい RepeatOnLifecycleWrongUsage lint チェックを lifecycle-runtime-ktx に追加しました。(706078b/187887400

API の変更

  • LifecycleOwner.addRepeatingJob API が削除され、構造化された同時実行が優先される、推論が容易な Lifecycle.repeatOnLifecycle に置き換えられました。(I4a3a8
  • 他の androidx.startup.Initializer が依存関係として使用できるように ProcessLifecycleInitializer を一般公開しました。(I94c31

バグの修正

  • フィールドに修飾子がある場合の NullSafeMutableLiveData lint チェックに関する問題を修正しました。(#147b/183696616
  • ジェネリックを使用した場合の NullSafeMutableLiveData lint チェックに関する別の問題を修正しました。(#161b/184830263

外部からの協力

  • NullSafeMutableLiveData lint チェックの改善にご協力いただいた maxsav 氏に感謝いたします。(#147b/183696616
  • NullSafeMutableLiveData lint チェックの改善にご協力いただいた kozaxinan 氏に感謝いたします。(#161b/184830263

バージョン 2.4.0-alpha01

2021 年 3 月 24 日

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 がリリースされました。バージョン 2.4.0-alpha01 に含まれる commit については、こちらをご覧ください

動作の変更

  • lifecycle-processandroidx.startup を使用して ProcessLifecycleOwner を初期化するようになりました。

    以前は、これは androidx.lifecycle.ProcessLifecycleOwnerInitializer によって行われていました。

    過去にプロセスのライフサイクルの初期化に使用されていた ContentProvidertools: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 を追加しました。これは新しい LifecycleOwner.addRepeatinJob API に代わるものです。(I0f4cd

バグの修正

  • Lifecycle 2.3.1 以降: NonNullableMutableLiveData lint ルールで、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 に含まれる commit については、こちらをご覧ください。

API の互換性を破る変更

  • viewModel() がオプションの ViewModelStoreOwner を受け取るようになったことで、LocalViewModelStoreOwner 以外のオーナーを簡単に操作できるようになりました。たとえば、viewModel(navBackStackEntry) を使用して、特定のナビゲーション グラフに関連付けられている ViewModel を取得できるようになりました。(I2628db/188693123

バージョン 1.0.0-alpha06

2021 年 6 月 2 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 がリリースされました。バージョン 1.0.0-alpha06 に含まれる commit については、こちらをご覧ください。

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 に含まれる commit については、こちらをご覧ください

新機能

  • Compose バージョン 1.0.0-beta07 との互換性を確保するために更新しました。

バグの修正

  • ui-test-manifest と ui-tooling-data の AndroidManifest ファイルに、Android 12 との互換性が備わりました。(I6f9deb/184718994

バージョン 1.0.0-alpha04

2021 年 4 月 7 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit については、こちらをご覧ください

依存関係の変更

  • このバージョンを使用すると、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 に含まれる commit については、こちらをご覧ください

API の変更

  • LocalViewModelStoreOwner.current が null 許容の ViewModelStoreOwner を返すようになり、現在の合成中に ViewModelStoreOwner が使用可能かどうかを判断しやすくなりました。ViewModelStoreOwner を必要とする API(viewModel()NavHost など)は、ViewModelStoreOwner が設定されていない場合、引き続き例外をスローします。(Idf39a

Lifecycle-Viewmodel-Compose バージョン 1.0.0-alpha02

2021 年 2 月 24 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • LocalViewModelStoreOwnerCompositionLocalProvider で使用できる 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 に含まれる commit については、こちらをご覧ください

新機能

  • viewModel() コンポーザブルと LocalViewModelStoreOwner は、androidx.compose.ui.viewinterop から androidx.lifecycle.viewmodel.compose パッケージのこのアーティファクトに移動しました。(I7a374

バージョン 2.3.1

Lifecycle バージョン 2.3.1

2021 年 3 月 24 日

androidx.lifecycle:lifecycle-*:2.3.1 がリリースされました。バージョン 2.3.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • NonNullableMutableLiveData lint ルールで、null 許容が異なるフィールド変数を適切に区別できるようになりました。(b/169249668

バージョン 2.3.0

バージョン 2.3.0

2021 年 2 月 10 日

androidx.lifecycle:lifecycle-*:2.3.0 がリリースされました。バージョン 2.3.0 に含まれる commit については、こちらをご覧ください

2.2.0 以降の主な変更

  • SavedStateHandle非 Parcelable クラスのサポート: 指定されたキーの setSavedStateProvider() を呼び出せるようにすることで、SavedStateHandle が遅延シリアル化をサポートするようになりました。これにより、SavedStateHandle がその状態を保存するよう求められたときに saveState() へのコールバックを取得する SavedStateProvider を提供します。非 Parcelable クラスを保存するをご覧ください。
  • Lifecycle Behavior Enforcement:
    • LifecycleRegistry は最終状態として DESTROYED を適用するようになりました。
    • LifecycleRegistry は、そのメソッドがメインスレッドで呼び出されることを確認するようになりました。これは、アクティビティやフラグメントなどのライフサイクルでは常に必須でしたが、メインスレッド以外のスレッドからオブザーバーを追加すると、実行時にクラッシュをキャッチすることが困難になっていました。独自のコンポーネントが所有する LifecycleRegistry オブジェクトでは、LifecycleRegistry.createUnsafe(...) を使用して明示的にチェックをオプトアウトできますが、その場合、この LifecycleRegistry が別のスレッドからアクセスされたときに適切な同期が行われることを保証する必要があります。
  • Lifecycle State と Event Helpers: State と移行方向に応じて Event を生成するために、downFrom(State)downTo(State)upFrom(State)upTo(State) の静的ヘルパー メソッドを Lifecycle.Event に追加しました。Lifecycle が Event の後で直接移行する State を提供する getTargetState() メソッドを追加しました。
  • withStateAtLeast: Lifecycle.withStateAtLeast API を追加しました。これらの API は、ライフサイクルの状態を待機し、状態が変化した時点でコードの非停止ブロックを同期的に実行して、その結果により再開します。これらの API は、停止コードの実行を許可せず、カスタム ディスパッチャを使用しない点で、既存の when* メソッドと異なります。(aosp/1326081
  • ViewTree API: 新しい ViewTreeLifecycleOwner.get(View) API と ViewTreeViewModelStoreOwner.get(View) API を使用すると、それぞれ View インスタンスを指定して、含まれている LifecycleOwnerViewModelStoreOwner をそれぞれ取得できます。これを正しく入力するには、Activity 1.2.0Fragment 1.3.0AppCompat 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 に含まれる commit については、こちらをご覧ください

バグの修正

  • SavedStateHandlekeys() メソッドについて、状態の保存前と保存後で整合性が保たれるようになりました。set()getLiveData() で使用されるキーに加えて、これまで setSavedStateProvider() で使用されていたキーが含まれるようになりました。(aosp/1517919b/174713653

外部からの協力

バージョン 2.3.0-beta01

2020 年 10 月 1 日

androidx.lifecycle:lifecycle-*:2.3.0-beta01 がリリースされました。バージョン 2.3.0-beta01 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください

バグの修正

  • NullSafeMutableLiveData lint チェックで発生するクラッシュの問題を修正しました。(aosp/1395367

バージョン 2.3.0-alpha06

2020 年 7 月 22 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 がリリースされました。バージョン 2.3.0-alpha06 に含まれる commit については、こちらをご覧ください

新機能

  • State と遷移方向に応じて Event を生成するため、downFrom(State)downTo(State)upFrom(State)upTo(State) の静的ヘルパー メソッドを Lifecycle.Event に追加しました。Lifecycle が Event の後で直接移行する State を提供する getTargetState() メソッドを追加しました。(I00887
  • Lifecycle.withStateAtLeast API を追加しました。これらの API は、ライフサイクルの状態を待機し、状態が変化した時点でコードの非停止ブロックを同期的に実行して、その結果により再開します。これらの API は、停止コードの実行を許可せず、カスタム ディスパッチャを使用しない点で、既存の when* メソッドと異なります。(aosp/1326081

動作の変更

  • LifecycleRegistry は最終状態として DESTROYED を適用するようになりました。(I00887
  • LifecycleRegistry は、そのメソッドがメインスレッドで呼び出されることを確認するようになりました。これは、アクティビティやフラグメントなどのライフサイクルでは常に必須でしたが、メインスレッド以外のスレッドからオブザーバーを追加すると、実行時にクラッシュをキャッチすることが困難になっていました。独自のコンポーネントが所有する LifecycleRegistry オブジェクトでは、LifecycleRegistry.createUnsafe(...) を使用して明示的にチェックをオプトアウトできますが、その場合、この LifecycleRegistry が別のスレッドからアクセスされたときに適切な同期が行われることを保証する必要があります。(Ie7280b/137392809

バグの修正

  • NullSafeMutableLiveData で発生するクラッシュを解決しました。(b/159987480
  • lifecycle-livedata-core-ktx(および特に NullSafeMutableLiveData)にバンドルされている lint チェックの ObsoleteLintCustomCheck を修正しました。(b/158699265

バージョン 2.3.0-alpha05

2020 年 6 月 24 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha05 がリリースされました。バージョン 2.3.0-alpha05 に含まれる commit については、こちらをご覧ください

バグの修正

  • LiveData でリエントラントの処理が改善され、onActive() または onInactive() への呼び出しの重複を防ぐようになりました(b/157840298)。
  • Android Studio 4.1 Canary 6 以上を使用している場合に Lint チェックが行われない問題を修正しました(aosp/1331903)。

バージョン 2.3.0-alpha04

2020 年 6 月 10 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha04 がリリースされました。バージョン 2.3.0-alpha04 に含まれる commit については、こちらをご覧ください

バグの修正

  • NonNullableMutableLiveData lint チェックで発生するクラッシュを修正しました。(b/157294666
  • NonNullableMutableLiveData lint チェックが、非 null 型のパラメータを持つ MutableLiveDatanull 値が設定されているケースを大幅にカバーするようになりました。(b/156002218

バージョン 2.3.0-alpha03

2020 年 5 月 20 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 がリリースされました。バージョン 2.3.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • 指定されたキーの setSavedStateProvider() を呼び出せるようにすることで、SavedStateHandle が遅延シリアル化をサポートするようになりました。SavedStateHandle が状態を保存するよう求められたときに saveState() へのコールバックを取得する SavedStateProvider を提供します。(b/155106862
  • 新しい ViewTreeViewModelStoreOwner.get(View) API を使用すると、View インスタンスを指定して、含まれている ViewModelStoreOwner を取得できます。これを正しく入力するには、Activity 1.2.0-alpha05Fragment 1.3.0-alpha05AppCompat 1.3.0-alpha01 にアップグレードする必要がありますfindViewModelStoreOwner() Kotlin 拡張機能が lifecycle-viewmodel-ktx に追加されました。(aosp/1295522

バグの修正

  • Lifecycle 2.3.0-alpha01 でリリースされた MutableLiveData lint チェックが lifecycle-livedata-core-ktx アーティファクトと一緒に公開されない問題を修正しました。(b/155323109

バージョン 2.3.0-alpha02

2020 年 4 月 29 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha02 がリリースされました。バージョン 2.3.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • SavedStateViewModelFactory を使用することで、null の Application をコンストラクタに渡せるようになりました。これにより、Application がすぐに利用できず、AndroidViewModel のサポートが不要な場合のサポートが向上しました。(aosp/1285740

バグの修正

  • API 28 以前のデバイスでのクラス検証エラーを回避することで、コールド スタートのパフォーマンスを改善しました。(aosp/1282118

バージョン 2.3.0-alpha01

2020 年 3 月 4 日

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 がリリースされました。バージョン 2.3.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • 新しい ViewTreeLifecycleOwner.get(View) API を使用すると、View インスタンスを指定して、含まれている LifecycleOwner を取得できます。これを正しく入力するには、Activity 1.2.0-alpha01Fragment 1.3.0-alpha01 にアップグレードする必要があります。findViewTreeLifecycleOwner Kotlin 拡張機能は lifecycle-runtime-ktx で利用できます。(aosp/1182361aosp/1182956
  • Kotlin で非 null として定義されている MutableLiveDatanull 値を設定すると警告する、新しい Lint チェックを追加しました。これは、livedata-core-ktx または livedata-ktx アーティファクトを使用する場合に利用できます。(aosp/1154723aosp/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 に含まれる commit については、こちらをご覧ください

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 に含まれる commit については、こちらをご覧ください

2.1.0 以降の重要な変更

  • Lifecycle コルーチンの統合: 新しい lifecycle-runtime-ktx アーティファクトにより、Lifecycle コルーチンと Kotlin コルーチンとの統合機能が追加されています。また、コルーチンを活用できるように lifecycle-livedata-ktx が拡張されました。詳細については、アーキテクチャ コンポーネントで Kotlin コルーチンを使用するをご覧ください。
  • ViewModelProviders.of() のサポート終了: ViewModelProviders.of() のサポートが終了しました。Fragment 1.2.0 を使用する場合、Fragment または FragmentActivity を新しい ViewModelProvider(ViewModelStoreOwner) コンストラクタに渡すと、同じ機能を実現できます。
  • lifecycle-extensions アーティファクトのサポート終了: 上記 ViewModelProviders.of() のサポート終了をもって、このリリースの lifecycle-extensions で最後に残った API がサポート終了となったため、このアーティファクトは完全にサポート終了とみなされます。今後リリースされる 2.3.0lifecycle-extensions が含まれる予定はないため、lifecycle-extensions ではなく、必要な Lifecycle アーティファクト(たとえば、LifecycleService を使用している場合は lifecycle-serviceProcessLifecycleOwner を使用している場合は lifecycle-process)を利用することを強くおすすめします。
  • Gradle Incremental Annotation Processor: Lifecycle のアノテーション プロセッサはデフォルトでインクリメンタルです。 アプリが Java 8 プログラミング言語で作成されている場合は DefautLifecycleObserver を、Java 7 の場合は LifecycleEventObserver を使用できます。

バージョン 2.2.0-rc03

2019 年 12 月 4 日

androidx.lifecycle:lifecycle-*:2.2.0-rc03 がリリースされました。バージョン 2.2.0-rc03 に含まれる commit については、こちらをご覧ください

バグの修正

  • モックされた ViewModelViewModelStore に保存され、後でデフォルト ファクトリでクエリが実行されたときに発生するエラーを修正しました。
  • launchWhenCreated および同様のメソッドで Dispatchers.Main.immediate が対応するライフサイクル イベント中に同期的に呼び出されるように修正しています。(aosp/1156203

外部寄与

  • 本修正に寄与した AndersJärleberg 氏に感謝いたします。(aosp/1156203
  • インライン実行の実装に対するレビューを実施した JetBrains 社の Vsevolod Tolstopyatov 氏に感謝いたします。

依存関係の変更

  • Lifecycle Extensions が Fragment 1.2.0-rc03 に依存するようになりました。

バージョン 2.2.0-rc02

2019 年 11 月 7 日

androidx.lifecycle:lifecycle-*:2.2.0-rc02 がリリースされました。バージョン 2.2.0-rc02 に含まれる commit については、こちらをご覧ください

バグの修正

  • ライブラリの ProGuard セットアップのバグを修正しました。このライブラリは、ターゲット API が 29 未満の場合、API 28 以降を搭載しているデバイスに影響します。(b/142778206

バージョン 2.2.0-rc01

2019 年 10 月 23 日

androidx.lifecycle:lifecycle-*:2.2.0-rc01 がリリースされました。バージョン 2.2.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • Dispatchers.Main.immediate の代わりに Dispatchers.Main を使用するため、launchWhenCreated と関連メソッドが関連するライフサイクル メソッドより 1 フレーム遅れて実行される問題を修正しました。(aosp/1145596

外部寄与

  • 本修正に寄与した Nicklas Ansman 氏に感謝いたします。(aosp/1145596

バージョン 2.2.0-beta01

2019 年 10 月 9 日

androidx.lifecycle:lifecycle-*:2.2.0-beta01 がリリースされました。バージョン 2.2.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • ProcessLifecycleOwner の順序で Lifecycle 2.2.0-alpha05 に生じる回帰と、アクティビティの LifecycleOwner が Android 10 デバイスで開始および再開に移行する問題を修正しました。(aosp/1128132
  • Lifecycle 2.2.0-alpha05 で生じる回帰を修正しました。バージョン 2.0.02.1.0lifecycle-process を使用すると NullPointerException が発生していました。(b/141536990

バージョン 2.2.0-alpha05

2019 年 9 月 18 日

androidx.lifecycle:lifecycle-*:2.2.0-alpha05 がリリースされました。バージョン 2.2.0-alpha05 に含まれる commit については、こちらをご覧ください

バグの修正

  • コルーチンのライブデータ ビルダーの競合状態を修正しました。(b/140249349

バージョン 2.2.0-alpha04

2019 年 9 月 5 日

androidx.lifecycle:lifecycle-*:2.2.0-alpha04 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • lifecycleScopewhenCreatedwhenStartedwhenResumedviewModelScope、また liveData の基となる実装では、Dispatchers.Main ではなく Dispatchers.Main.immediate が使用されるようになりました。(b/139740492

外部寄与

  • Dispatchers.Main.immediate への移行に寄与した Nicklas Ansman 氏に感謝いたします。(aosp/1106073

バージョン 2.2.0-alpha03

2019 年 8 月 7 日

androidx.lifecycle:lifecycle-*:2.2.0-alpha03 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

API の変更

  • ViewModelProviders.of() が非推奨になりました。Fragment または FragmentActivity を新しい ViewModelProvider(ViewModelStoreOwner) コンストラクタに渡すと、同じ機能を実現できます。(aosp/1009889

バージョン 2.2.0-alpha02

2019 年 7 月 2 日

androidx.lifecycle:*:2.2.0-alpha02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

API の変更

  • LiveDataScope.initialValue を、liveData ブロックの現在の出力値をトラックする LiveDataScope.latestValue に置き換えました。
  • タイプ Duration として timeout パラメータを受け取る liveData ビルダーに新しいオーバーロードを追加しました。

Version 2.2.0-alpha01

2019 年 5 月 7 日

androidx.lifecycle:*:2.2.0-alpha01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • このリリースでは、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 に含まれる commit については、こちらをご覧ください

1.0.0 の重要な機能

  • 新しい SavedStateHandle クラスが追加されました。これにより、ViewModel クラスが保存済み状態にアクセスして簡単に扱うことができるようになります。このオブジェクトは ViewModel クラスのコンストラクタで受け取ることができ、Fragment によってデフォルトで提供されるファクトリと 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 に含まれる commit については、こちらをご覧ください

依存関係の変更

  • 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 に含まれる commit については、こちらをご覧ください

依存関係の変更

  • Lifecycle 2.2.0-rc02 に依存するようになりました。

ViewModel-SavedState バージョン 1.0.0-rc01

2019 年 10 月 23 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 がリリースされました。1.0.0-beta01 からの変更はありません。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください

ViewModel-Savedstate バージョン 1.0.0-beta01

2019 年 10 月 9 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • 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 に含まれる commit については、こちらをご覧ください

API の変更

  • SavedStateViewModelFactoryAbstractSavedStateViewModelFactory を拡張することはなく、SavedStateHandle は ViewModel が必要とする場合にのみ作成されます。(aosp/1113593

ViewModel-SavedState バージョン 1.0.0-alpha03

2019 年 8 月 7 日

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

互換性を破る変更

  • lifecycle-viewmodel-savedstatefragment に依存しなくなり、関連する SavedStateViewModelFactory(Fragment)SavedStateViewModelFactory(FragmentActivity) のコンストラクタが削除されました。代わりに SavedStateViewModelFactory が、Activity 1.1.0-alpha02Fragment 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 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • デフォルト値を受け入れる 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 がリリースされました。この初回リリースの完全な commit ログについては、こちらをご覧ください。

新機能

  • ViewModels で savedstate を使用できるようになりました。そのためには、新しく導入されたビューモデルのファクトリ SavedStateVMFactory を使用し、ViewModel にはパラメータとして SavedStateHandle オブジェクトを受け取るコンストラクタが必要です。

バージョン 2.1.0

2.0.0 以降の重要な変更

  • ライフサイクル イベントのストリームが必要な場合のために、LifecycleEventObserver を追加しました。非表示の GenericLifecycleObserver クラスではなく、公開 API です。
  • LiveData.observe メソッドと Transformations.* メソッドの ktx 拡張機能を追加しました。
  • ソースの LiveData 値が変更されるまで値を出力しない新しい LiveData オブジェクトを作成する、Transformations.distinctUntilChanged を追加しました。
  • 拡張プロパティ ViewModel.viewModelScope を追加することで、ViewModels にコルーチンのサポートを追加しました。

バージョン 2.1.0

2019 年 9 月 5 日

androidx.lifecycle:lifecycle-*:2.1.0 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バージョン 2.1.0-rc01

2019 年 7 月 2 日

androidx.lifecycle:*:2.1.0-rc01 がリリースされました。androidx.lifecycle:*:2.1.0-beta01 からの変更はありません。このバージョンに含まれる commit については、こちらをご覧ください。

バージョン 2.1.0-beta01

2019 年 5 月 7 日

androidx.lifecycle:*:2.1.0-beta01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • Lifecycle はベータ版に進みました。変換と観察のための liveData 拡張関数、プロパティ委任による ViewModel 初期化など、以前のアルファ版で導入された API は安定しており、変更予定はありません。

バージョン 2.1.0-alpha04

2019 年 4 月 3 日

androidx.lifecycle:*:2.1.0-alpha04 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

API の変更

  • 互換性を破る変更: by viewModels()by activityViewModels() の基になる API は、ViewModelStoreOwner だけでなく ViewModelStore を直接サポートするように変更されました。(aosp/932932

バージョン 2.1.0-alpha03

2019 年 3 月 13 日

androidx.lifecycle:*:2.1.0-alpha03 がリリースされました。このバージョンに含まれる commit の完全なリストについては、こちらをご覧ください。

API の変更

  • ViewModelProvider.KeyedFactory が削除されました。ViewModelProvider.Factory に続く 2 番目のインターフェースでしたが、Kotlin の by viewmodels {} のプロパティ委任の新機能と十分にコンポーズしませんでした。(aosp/914133

バージョン 2.1.0-alpha02

2019 年 1 月 30 日

androidx.lifecycle 2.1.0-alpha02 がリリースされました。

API の変更

  • LifecycleRegistrysetCurrentState() メソッドが追加されました。このメソッドは、サポートが終了した setState() メソッドを置き換えるものです。(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 オブジェクトを作成します。
  • ViewModels のコルーチンのサポート: 拡張プロパティ ViewModel.viewModelScope が追加されました。
  • ViewModelProvider.KeyedFactory を追加しました。create メソッドで keyClass を受け取る ViewModels のファクトリです。

バージョン 2.0.0

バージョン 2.0.0

2018 年 9 月 21 日

Lifecycle 2.0.0 のリリースでは、ViewModel に関する 2.0.0-rc01 のバグが 1 件修正されています。

バグの修正

  • コンストラクタを誤って削除する ViewModel ProGuard ルールを修正しました。b/112230489

バージョン 2.0.0-beta01

2018 年 7 月 2 日

バグの修正

  • 実装のみを保持し、サブインターフェースは保持しないように LifecycleObserver ProGuard ルールを修正しました。b/71389427
  • 難読化と圧縮を許可するように ViewModel ProGuard ルールを修正しました。

AndroidX 以前のバージョン

AndroidX 以前のバージョンの Lifecycle では、次の依存関係を含めます。

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 日

1 つの小規模な変更のみ: 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削除されました。FragmentActivityAppCompatActivity を使用するか、Fragment をサポートしてください。
  • @NonNull アノテーションが ViewModelProvidersViewModelStores に追加されました。
  • ViewModelProviders コンストラクタのサポートが終了しました。その静的メソッドを直接使用してください。
  • ViewModelProviders.DefaultFactory のサポートが終了しました。ViewModelProvider.AndroidViewModelFactory を使用してください。
  • 静的な ViewModelProvider.AndroidViewModelFactory.getInstance(Application) メソッドが追加され、ViewModel インスタンスや AndroidViewModel インスタンスの作成に適した静的な Factory を取得できるようになりました。