ライフサイクル

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

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

アーティファクト 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
lifecycle-* 2.11.0 - - 2.12.0-alpha04
lifecycle-viewmodel-navigation3 2.11.0 - - 2.12.0-alpha04
このライブラリの最終更新日: 2026 年 9 月 23 日

依存関係の宣言

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

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

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.11.0"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.12.0-alpha04"

        // 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.11.0"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // ViewModel integration with Navigation3
        implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.12.0-alpha04")

        // 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.11.0"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.11.0"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

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

バージョン 2.12

バージョン 2.12.0-alpha04

2026 年 9 月 23 日

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

バージョン 2.12.0-alpha03

2026 年 9 月 9 日

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

バグの修正

  • Compose ライブラリの compileSdk が 37.1 に更新されました。これには、Compose を使用するすべてのアプリとライブラリの compileSdk を推移的に更新する必要があります。(I05b0f)

バージョン 2.12.0-alpha02

2026 年 8 月 26 日

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

API の変更

  • AutoRecreated と runOnNextRecreation のサポートを終了し、SavedStateProvider と SavedStateRestorer に置き換えました。(Iadc00)

バージョン 2.12.0-alpha01

2026 年 8 月 12 日

androidx.lifecycle:lifecycle-*:2.12.0-alpha01 がリリースされました。バージョン 2.12.0-alpha01 には、これらの commit が含まれています。

バグの修正

  • lifecycle-compiler アノテーション プロセッサ アーティファクトのサポートを終了します。アノテーション プロセッサを使用する代わりに、DefaultLifecycleObserver または LifecycleEventObserver に移行してください。(Ibf571、b/541926513)
  • SavedStateViewModelFactory と AbstractSavedStateViewModelFactory は、指定された SavedStateRegistryOwner が ViewModelStoreOwner を実装していない場合、すぐにフェイルファストするようになりました。これにより、コンポーネントの再作成中に遅延が発生してクラッシュすることを防ぎます。(Icf317)
  • LifecycleRegistry イベント ディスパッチにシステム トレースを追加します。(Ie1f92、b/112161409)

バージョン 2.11

バージョン 2.11.0

2026 年 6 月 17 日

androidx.lifecycle:lifecycle-*:2.11.0 がリリースされました。バージョン 2.11.0 にはこれらの commit が含まれています。

2.10.0 以降の重要な変更:

Compose のスコープ付き ViewModel - ViewModel を特定の UI スコープ(Pager ページなど)に結び付けるための ViewModelStoreProvider、rememberViewModelStoreProvider、rememberViewModelStoreOwner の導入。これらは構成の変更後も存続し、コンポーザブルが階層から削除されると自動的にクリアされます。

KMP のサポート - ViewModel-Compose と ViewModel-Navigation3 がすべての Kotlin マルチプラットフォーム ターゲットをサポートするようになりました。

Navigation3 の統合 - ViewModelStoreNavEntryDecorator が ViewModelStoreOwner を受け取り、CreationExtras とファクトリをネストされた ViewModel に伝播するようになりました。新しい rememberViewModelStoreNavEntryDecorator オーバーロードを使用してプロバイダをホイストし、複数のバックスタックをサポートすることもできます。removeViewModelStoreOnPop は非推奨となりました。

Lifecycle Utilities - 具現化された ViewModelProvider.get<VM>(key) 拡張機能、ラムダベースの Lifecycle.addObserver、ViewModelStoreOwner のデフォルトのファクトリ拡張機能を追加しました。ViewModel.onCleared に @EmptySuper アノテーションが付くようになりました。

その他の変更 - LocalLifecycleOwner でリフレクション フォールバックを削除するには、Compose UI 1.7.0+ が必要になりました。Compose compileSdk の更新には、最小 AGP バージョン 9.2.0 が必要です。

バージョン 2.11.0-rc01

2026 年 6 月 3 日

androidx.lifecycle:lifecycle-*:2.11.0-rc01 がリリースされました。バージョン 2.11.0-rc01 にはこれらの commit が含まれています。

バージョン 2.11.0-beta02

2026 年 5 月 19 日

androidx.lifecycle:lifecycle-*:2.11.0-beta02 がリリースされました。バージョン 2.11.0-beta02 にはこれらの commit が含まれています。

API の変更

  • ViewModelStoreProvider を受け入れる rememberViewModelStoreNavEntryDecorator オーバーロードを追加します。これにより、デベロッパーはプロバイダをデコレータのコンポジション スコープの上にホイストできます。これにより、同じエントリが両方に存在し、別々の状態を必要とする複数のバックスタックをサポートするなどのユースケースが可能になります。(Ibbbfe、b/503420425)
  • 兄弟プロバイダがコンポジションから削除されたときに、共有 ViewModels が早期にクリアされるのを防ぎます。(Ib321a)

バグの修正

  • LocalLifecycleOwner を使用するには、Compose UI 1.7.0 以降が必要です。これにより、内部リフレクション フォールバックが削除され、パフォーマンスが向上しますが、クライアントに対して厳格な依存関係のアップグレードが強制されます。(I48e65)
  • Compose Multiplatform 1.11.0 にアップグレードする際に、古い JetBrains フォーク バージョンとのシンボルの重複を防ぎます。(Iccd64)
  • 不安定なデフォルト パラメータで rememberViewModelStoreProvider を使用しているときに、再コンポーズ中に ViewModels が誤ってクリアされる問題を修正しました。プロバイダは、親オーナーまたは明示的なキーが変更された場合にのみ再作成されるようになりました。(Ibe296、b/501792448)

バージョン 2.11.0-beta01

2026 年 4 月 22 日

androidx.lifecycle:lifecycle-*:2.11.0-beta01 がリリースされました。バージョン 2.11.0-beta01 にはこれらの commit が含まれています。

API の変更

  • キーありのユースケースとキーなしのユースケース用に、rememberViewModelStoreOwner と rememberViewModelStoreProvider を別々の関数に分割します。(Ifd154、b/500802788)

バグの修正

  • Compose compileSdk を API 37 に更新しました。つまり、Compose を使用する場合は、AGP の最小バージョンが 9.2.0 である必要があります。(Id45cd、b/413674743)

バージョン 2.11.0-alpha03

2026 年 3 月 25 日

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

API の変更

  • ViewModelStoreProvider コンストラクタで parentKey をオプション パラメータにし、デフォルトを null にして、parentStore または parentOwner の後に移動します。これにより、共有スコープキーが不要な場合のインスタンス化が簡素化されます。(I66b67)
  • ViewModelStoreNavEntryDecorator が ViewModelStore ではなく ViewModelStoreOwner を受け入れるようになりました。これにより、Navigation3 は親のデフォルトの CreationExtras と ViewModelProvider.Factory をネストされた ViewModel に伝播し、アプリケーション レベルの依存関係をサポートします。(Ia6018、b/434651920)
  • 一意のキーを使用して ViewModelStoreProvider 状態を分離します。これにより、破棄時に兄弟プロバイダが互いの ViewModel を誤ってクリアすることを防ぎます。(I59c0b、b/434651920)
  • ViewModelProvider.get<VM>(key: String) 拡張関数を追加します。これにより、デベロッパーは Kotlin の具現化された型パラメータを含むカスタム key を使用して ViewModel をよりクリーンに取得できるようになり、クラス型を明示的に渡す必要がなくなります。(Ic1f59)
  • ViewModelStoreProvider に defaultArgs のサポートを追加して、デフォルトの SavedState 値で ViewModels を初期化できるようにしました。(I1e933、b/434651920、b/165642391)
  • removeViewModelStoreOnPop と関連する ViewModelStoreNavEntryDecoratorDefaults を非推奨にします。この API は構成変更の回避策でしたが、現在は内部で処理されています。ViewModel を含むすべてのデコレータの状態は、ポップ時に同時にクリアする必要があります。バックスタックが NavDisplay に渡されるとき以外にもデコレータの状態を保持するには、rememberDecoratedNavEntries API を使用します。(I852d9)

バグの修正

  • CreationExtras.Key に toString() を追加して、クラス名を表示します。(I5de52)

バージョン 2.11.0-alpha02

2026 年 3 月 11 日

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

スコープ付き ViewModel

  • このリリースでは、Compose でスコープ付き ViewModelStore インスタンスを作成するための API が導入されています。これにより、ViewModels を特定の UI スコープ(個々の Pager ページや LazyList アイテムなど)に関連付けることができます。これらの ViewModels は構成の変更後も存続し、対応するコンポーザブルが階層から完全に削除されると自動的にクリアされます。

    // Hoist the parent provider outside the Pager.
    val provider = rememberViewModelStoreProvider()
    val pagerState = rememberPagerState(pageCount = { 5 })
    
    HorizontalPager(state = pagerState) { page ->
        // Create an owner scoped to the current page.
        val storeOwner = rememberViewModelStoreOwner(provider, key = page)
    
        // Provide the scoped owner to this composition.
        CompositionLocalProvider(LocalViewModelStoreOwner provides storeOwner) {
            // ViewModel is now scoped specifically to this page.
            val viewModel: PageViewModel = viewModel()
        }
    }
    

ViewModelStoreProvider は Compose の外部でも使用でき、アクティビティ、フラグメント、ビューで使用できます。

新機能

  • ViewModel Navigation3 にすべての KMP ターゲットのサポートを追加。(I60fa5)
  • LifecycleOwner、ViewModelStoreOwner、SavedStateRegistryOwner のファクトリ関数を追加して、カスタム オーナー コンポーネントをコンポーズする際のボイラープレートを削減しました。(I9682c)
  • ラムダベースの Lifecycle.addObserver 拡張関数を追加して、匿名オブジェクトをインスタンス化せずにライフサイクル イベントを監視できるようにします。(I94f38)
  • defaultViewModelProviderFactory と defaultViewModelCreationExtras の拡張機能を ViewModelStoreOwner に追加します。これらは、HasDefaultViewModelProviderFactory に対して手動で型チェックを行う必要なく、デフォルトへの安全なアクセスを提供します。(Ifa83d)

API の変更

  • Compose でスコープ付き ViewModelStoreOwner を簡単に作成するための rememberViewModelStoreOwner を追加しました。この関数は、コンポーザブルのライフサイクルに関連付けられたオーナーを返します。コンポーザブルが UI から削除されると、ViewModel が自動的にクリアされます。(I2a15b、b/165642391)
  • Compose でスコープ付き ViewModelStore インスタンスを作成できるように rememberViewModelStoreProvider を追加しました。この関数は、子ストアを親オーナーにリンクします。これにより、ViewModel は構成の変更後も引き継がれ、コンポーザブルが階層から削除されると自動的にクリアされます。(I0f57a、b/165642391)
  • スコープ付き ViewModelStore インスタンスを管理するための ViewModelStoreProvider を追加しましたこのクラスを使用すると、構成の変更後も存続し、個別にクリアできる子スコープを作成できます。また、親からデフォルトのファクトリと作成エクストラを継承する ViewModelStoreOwner ラッパーも提供します。(I87f4f、b/434651920)

バージョン 2.11.0-alpha01

2026 年 2 月 25 日

androidx.lifecycle:lifecycle-*:2.11.0-alpha01 がリリースされました。バージョン 2.11.0-alpha01 には、これらの commit が含まれています。

新機能

  • ViewModel-Compose で Kotlin マルチプラットフォーム(KMP)のすべてのターゲットをサポート。オーナーの解決を LocalView から切り離し、プラットフォーム ホストがデフォルトの ViewModelStoreOwner を提供できるようにします。これにより、Android で LocalView を安全なフォールバックとして維持できます。(I09fab、b/434940570、Ic8526、b/478146897)

API の変更

  • デバッグを効率化するために、保存されているすべての鍵を一覧表示する toString 実装を ViewModelStore に追加しました。(I0a6f4)
  • HasDefaultViewModelProviderFactory.defaultViewModelProviderFactory のデフォルト実装を追加しました。これにより、インターフェースを実装する際にこのプロパティを明示的にオーバーライドする必要がなくなりました。(Ia7095)
  • ViewModel.onCleared に @EmptySuper アノテーションを付け、オーバーライドするメソッドが super.onCleared() を呼び出す必要がないことを明示的に示します。(I8c226)

バージョン 2.10

バージョン 2.10.0

2025 年 11 月 19 日

androidx.lifecycle:lifecycle-*:2.10.0 がリリースされました。バージョン 2.10.0 にはこれらの commit が含まれています。

2.9.0 以降の重要な変更:

  • rememberLifecycleOwner コンポーザブルを追加して、UI 内でスコープ付きライフサイクルを直接作成できるようにします。これは、現在のページを RESUMED にする HorizontalPager や Navigation3 などのライブラリのように、独自のライフサイクルを個別に管理する必要があるコンポーネントに便利です。

    @Composable
    fun MyComposable() {
        // This LifecycleOwner is automatically moved to DESTROYED when
        // it leaves composition and its maxLifecycle is the maximum of either
        // the maxLifecycle you set or the Lifecycle.State of the parentLifecycleOwner
        val lifecycleOwner = rememberLifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        )
        CompositionLocalProvider(LocalLifecycleOwner provides lifecycleOwner) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    
  • lifecycle-viewmodel-navigation3 アーティファクトは Navigation3 の事前構築済み統合を提供します。これにより、rememberViewModelStoreNavEntryDecorator() API を使用して、ViewModel インスタンスのスコープを個々の画面(「エントリ」)に設定できます。

    @Composable
    fun MyComposable() {
        NavDisplay(
            backStack = backStack,
            entryDecorators =
                listOf(
                    rememberSaveableStateHolderNavEntryDecorator(),
                    // Add this line to automatically scope ViewModels to each entry
                    rememberViewModelStoreNavEntryDecorator(),
                ),
            entryProvider = entryProvider {
                // Add your entries here
            }
        }
    }
    
  • CreationExtras のビルダー ファクトリ関数を追加し、より便利で慣用的な Kotlin API を提供します。

    override val defaultViewModelCreationExtras: CreationExtras
        // Use the CreationExtras builder to add in a custom value to the default
        // CreationExtras in your Activity or Fragment
        get() = super.defaultViewModelCreationExtras + CreationExtras {
            this[CustomKey] = "customValue"
       }
    
  • SavedStateHandle.saved で nullable 型のネイティブ サポートを追加し、nullable プロパティの保存と復元を簡素化しました。

  • SavedStateHandle コンストラクタを @VisibleForTesting としてマークします。

  • minSdk が API 21 から API 23 に変更されました。

バージョン 2.10.0-rc01

2025 年 11 月 5 日

androidx.lifecycle:lifecycle-*:2.10.0-rc01 がリリースされました。バージョン 2.10.0-rc01 には、これらの commit が含まれています。

バージョン 2.10.0-beta01

2025 年 10 月 22 日

androidx.lifecycle:lifecycle-*:2.10.0-beta01 がリリースされました。バージョン 2.10.0-beta01 にはこれらの commit が含まれています。

API の変更

  • ViewModelStoreNavEntryDecoratorDefault の名前が ViewModelStoreNavEntryDecoratorDefaults に変更されました。(I6d27b、b/444447434)

バグの修正

  • rememberLifecycleOwner は、オーナーが Lifeycle.State.CREATED に移動する前に Lifecycle.Event.ON_DESTROY イベントを受信してもクラッシュしなくなりました。(I6f98e、b/444594991)

バージョン 2.10.0-alpha05

2025 年 10 月 8 日

androidx.lifecycle:lifecycle-*:2.10.0-alpha05 がリリースされました。バージョン 2.10.0-alpha05 には、これらの commit が含まれています。

API の変更

  • removeViewModelStoreOnPopCallback() は ViewModelStoreNavEntryDecoratorDefault オブジェクトの一部になりました。他のプラットフォームや実装は、ここでデフォルトを呼び出すことができます。(Ia1f23、b/444447434)
  • ViewModelStoreNavEntryDecorator を関数からクラスにリファクタリングして、NavEntryDecorator のファクトリとしての機能をより適切に反映させました。また、デコレータの shouldRemoveViewModelStore パラメータの名前を removeViewModelStoreOnPop に変更して、このコールバックが backStack からエントリがポップされた場合にのみ呼び出されることを明確にしました。(Iefdc5、b/444447434)

バージョン 2.10.0-alpha04

2025 年 9 月 24 日

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

API の変更

  • LifecycleOwner コンポーザブルを rememberLifecycleOwner にリファクタリングします。この関数は LifecycleOwner を直接返すようになりました。このオーナーをサブコンポジションに渡すには、CompositionLocalProvider を使用します。(Ic57f0、b/444446629)
  • lifecycle-viewmodel-navigation3 に KMP スタブを追加して、JetBrains がこれらのターゲットを埋めるフォークを提供し、CMP をサポートできるようにしました。(I44a4c)

バージョン 2.10.0-alpha03

2025 年 8 月 27 日

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

API の変更

  • Compose を 1.9.0 に更新します。(I2b9de)

バージョン 2.10.0-alpha02

2025 年 8 月 13 日

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

新機能

  • LifecycleOwner コンポーザブルでスタンドアロンのルート ライフサイクルを作成できるようになりました。parent = null を(明示的に)設定すると、新しいライフサイクルはホスト(Activity、Fragment、NavBackStackEntry など)から独立して動作します。コンポーザブルがコンポジションに入るとすぐに開始され、コンポジションから出ると自動的に破棄されます。(I8dfbe、b/433659048)

    @Composable
    fun IndependentComponent() {
        // Create a standalone lifecycle, not tied to the parent Activity/Fragment.
        LifecycleOwner(parent = null) {
            val rootLifecycle = LocalLifecycleOwner.current.lifecycle
        }
    }
    

API の変更

  • LifecycleOwner コンポーザブルで、parentLifecycleOwner パラメータの名前が parent に変更されました。(I080bc)

バグの修正

  • LifecycleOwner composable が、破棄時にライフサイクルを DESTROYED に正しく移動するようになりました。これにより、ライフサイクルへの参照を保持する外部コードの潜在的なリークを防ぐことができます。(I9e5b7、b/433659048)
  • デフォルトの minSdk を API 21 から API 23 に移行(Ibdfca、b/380448311、b/435705964、b/435705223)

外部からの協力

  • LifecycleOwner から不要な内部バッキング フィールドを削除しました。Jake Wharton さん、ご協力ありがとうございました。(Ideddb)

バージョン 2.10.0-alpha01

2025 年 7 月 30 日

androidx.lifecycle:lifecycle-*:2.10.0-alpha01 がリリースされました。バージョン 2.10.0-alpha01 にはこれらの commit が含まれています。

新機能

  • LifecycleOwner コンポーザブルを追加して、UI 内で直接スコープ付きライフサイクルを作成できるようにします。これは、独自のライフサイクルを個別に管理する必要があるコンポーネントに便利です。Navigation3 がこの新しいコンポーザブルを統合する方法の例については、aosp/3708610 をご覧ください。(76cbf7)

    @Composable
    fun MyComposable() {
        LifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        ) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    

API の変更

  • CreationExtras のビルダー ファクトリ関数を追加し、より便利で慣用的な Kotlin API を提供します。(Iab2bd)
  • SavedStateHandle.saved で nullable 型のネイティブ サポートを追加し、nullable プロパティの保存と復元を簡素化しました。(I54d69、b/421325690)
  • SavedStateHandle コンストラクタを @VisibleForTesting としてマークします。(Iff0e0、b/408002794)

バージョン 2.9

バージョン 2.9.4

2025 年 9 月 17 日

androidx.lifecycle:lifecycle-*:2.9.4 がリリースされました。バージョン 2.9.4 にはこれらの commit が含まれています。

バグの修正

  • Compose コンパイラ プラグインが適用されず、Lifecycle KMP アーティファクトが破損するエラーを修正しました。(Ie95bc、b/443096483、b/443965665)

バージョン 2.9.3

2025 年 8 月 27 日

androidx.lifecycle:lifecycle-*:2.9.3 がリリースされました。バージョン 2.9.3 にはこれらの commit が含まれています。

新機能

  • 新しい Kotlin Multiplatform(KMP)ターゲットを Lifecycle *-compose アーティファクトに追加しました。Lifecycle は、JVM(Android とデスクトップ)、ネイティブ(Linux、iOS、watchOS、macOS、MinGW)、ウェブ(JavaScript、WasmJS)の合計で次のプラットフォームをサポートするようになりました。(I0a0e4)

バグの修正

バージョン 2.9.2

2025 年 7 月 16 日

androidx.lifecycle:lifecycle-*:2.9.2 がリリースされました。バージョン 2.9.2 にはこれらの commit が含まれています。

バグの修正

  • Lifecycle アーティファクトに新しい Kotlin Multiplatform(KMP)ターゲットを追加しました。Lifecycle は、JVM(Android とパソコン)、ネイティブ(Linux、iOS、watchOS、macOS、MinGW)、ウェブ(JavaScript、WasmJS)の合計で次のプラットフォームをサポートするようになりました。Compose 1.9 の安定版リリースに依存するため、*-compose アーティファクトに新しい KMP ターゲットは追加されていません。(I01cb8)。

依存関係の更新

バージョン 2.9.1

2025 年 6 月 4 日

androidx.lifecycle:lifecycle-*:2.9.1 がリリースされました。バージョン 2.9.1 にはこれらの commit が含まれています。

バグの修正

  • SavedStateHandle.remove(key) が SavedStateHandle.getMutableStateFlow(key) 状態をクリアしない問題を修正しました。(d5f939、b/418746333)

バージョン 2.9.0

2025 年 5 月 7 日

androidx.lifecycle:lifecycle-*:2.9.0 がリリースされました。バージョン 2.9.0 にはこれらの commit が含まれています。

2.8.0 以降の重要な変更

  • 新しい androidx.lifecycle:lifecycle-viewmodel-testing KMP アーティファクトが利用可能になりました。このアーティファクトは、ViewModels を単独でテストするための ViewModelScenario クラスを提供します。また、onCleared と SavedStateHandle のサポート、recreate() を介したテスト プロセスの終了と再作成もサポートします。
  • SavedStateHandle に getMutableStateFlow を追加して MutableStateFlow を返します。この新しい関数は鍵専用であり、getLiveData では使用できません。両方を使用して同じ状態にアクセスしようとすると、例外がスローされます。
  • CreationExtras には、Kotlin でコンテンツをイディオム的に操作できるように、マップのような演算子のオーバーロードが含まれるようになりました。CreationExtras で in、+=、+ を使用できます。

KotlinX シリアル化のサポート

  • SavedState 1.3.0 に KotlinX シリアル化のサポートが追加されたため、saved(遅延プロパティ デリゲート)を導入しました。これにより、@Serializable クラスを SavedStateHandle に簡単に保存し、プロセスの終了と再作成時に、それらのクラスを自動的に復元できるようになりました。saved デリゲートは遅延評価されるため、アクセスされるまで init ラムダを呼び出したり、SavedStateHandle に何も保存したりしないことに注意してください。

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Kotlin マルチプラットフォーム

  • lifecycle-testing モジュールが KMP に対応し、TestLifecycleOwner などの API が含まれるようになりました。
  • lifecycle-viewmodel-savedstate モジュールが KMP に対応し、SavedStateHandle などの API が含まれるようになりました。
  • androidx.compose.ui.platform.LocalLifecycleOwner が common ソースセットで使用できるようになりました。
  • NewInstanceFactory が JVM デスクトップと Android ターゲットで利用できるようになりました。

動作の変更

  • Lifecycle.DESTROYED 状態は終了状態です。Lifecycle をこの状態から別の状態に移行しようとすると、IllegalStateException が発生します。
  • 返された Bundle が空の SavedStateProvider.saveState() は、SavedStateHandle に含まれなくなりました。

バージョン 2.9.0-rc01

2025 年 4 月 23 日

androidx.lifecycle:lifecycle-*:2.9.0-rc01 がリリースされました。バージョン 2.9.0-rc01 には、これらの commit が含まれています。

Lint API の互換性に関する警告

  • JetBrains が KaCallableMemberCall をクラスからインターフェースに変更したため、バイナリ互換性が損なわれています。プロジェクトの AGP バージョンが lint チェックのコンパイルに使用されたバージョンと異なる場合、クラッシュが発生する可能性があります。この更新は aosp/3577172 で行われましたが、リリースノートに記載されていなかったため、ここで明確にします。推奨される修正: 最新の安定版 AGP に更新します。完全に更新できない場合は、android.experimental.lint.version を使用して、AGP バージョンに合わせて lint チェックを調整します。詳しくは、Compose ランタイムの動作の変更をご覧ください。

バージョン 2.9.0-beta01

2025 年 4 月 9 日

androidx.lifecycle:lifecycle-*:2.9.0-beta01 がリリースされました。バージョン 2.9.0-beta01 にはこれらの commit が含まれています。

API の変更

  • Lifecycle ViewModel Compose は、Compose ランタイム 1.7.1 以降と同じ Kotlin Multiplatform 設定を使用するようになりました。-desktop アーティファクトが削除され、-jvmStubs アーティファクトと -linuxx64Stubs アーティファクトが追加されました。これらのターゲットは使用を想定したものではなく、Jetbrains Compose の取り組みを支援するためのプレースホルダです。(I5cb14、b/406592090)

依存関係の更新

  • このライブラリは Kotlin 2.0 言語レベルをターゲットとするようになり、KGP 2.0.0 以降が必要になりました。(Idb6b5)
  • Lifecycle ViewModel Compose が Compose 1.7.8 に依存するようになりました。(I5cb14、b/406592090)

バージョン 2.9.0-alpha13

2025 年 3 月 26 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 がリリースされました。一般公開されている主な変更点はありません。バージョン 2.9.0-alpha13 に含まれる commit については、こちらをご覧ください。

バージョン 2.9.0-alpha12

2025 年 3 月 12 日

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

API の変更

  • サポートされているすべての KMP プラットフォームの ViewModelProvider.get に @MainThread アノテーションを追加します。(I7e8dd、b/397736115)
  • SavedState*Delegates を SavedState*Delegate に変更しました。(I8589b、b/399629301)

バージョン 2.9.0-alpha11

2025 年 2 月 26 日

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

API の変更

  • saved() デリゲートに SavedStateConfig パラメータを追加(I39b3a)

バージョン 2.9.0-alpha10

2025 年 2 月 12 日

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

API の変更

  • MutableStateSerializer を lifecycle-viewmodel-compose から savedstate-compose に移動します。(I4f690、b/378895074)

外部からの協力

  • コンポジションで Lifecycle::currentState を呼び出すための新しい Lint の問題を新たに追加しました。代わりに currentStateAsalue().value を使用して、ライフサイクル状態の変更が正しく再コンポーズを引き起こすようにすることを推奨します。Steven Schoen 氏に感謝いたします。(Iad484)

バージョン 2.9.0-alpha09

2025 年 1 月 29 日

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

新機能

  • androidx.compose.runtime.MutableState をシリアル化するための MutableStateSerializer を追加します。(Idfc48、b/378895074)

API の変更

  • オーバーロードされた SavedStateHandle.saved() デリゲート関数をデフォルト パラメータに置き換え(Icd1c1)
  • AbstractSavedStateViewModelFactory は、すべての ViewModel に対して SavedStateHandle を作成し、不要なオーバーヘッドが発生するため、非推奨になりました。ViewModel をより効率的に作成するには、代わりに CreationExtras.createSavedStateHandle で ViewModelProvider.Factory を使用します。(Ia920b、b/388590327)

バージョン 2.9.0-alpha08

2024 年 12 月 11 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha08 がリリースされました。バージョン 2.9.0-alpha08 には、これらの commit が含まれています。

新機能

  • ViewModelScenario.recreate を追加して、テスト対象の ViewModel と関連するすべてのコンポーネントを再作成するシステム プロセスの終了をシミュレートします。(Id6a69、b/381063087)
  • それぞれの findViewTree API を介して取得された LifecycleOwner インスタンスと ViewModelStoreOwner インスタンスは、ViewOverlay などのビューの分離された親を介して解決できるようになりました。分離ビューの親の詳細については、core のリリースノートまたは ViewTree.setViewTreeDisjointParent のドキュメントをご覧ください。(I800f4)

API の変更

  • 名前付けとパッケージ構成を SavedStateRegistryOwnerDelegate とより一貫性のあるものにしました(I8c135、b/376026744)

バグの修正

  • このライブラリは、型使用の JSpecify nullness アノテーションを使用するようになりました。Kotlin を使用している場合、次のコンパイラ引数を使用して正しい使用法を適用する必要があります。-Xjspecify-annotations=strict(これは Kotlin コンパイラのバージョン 2.1.0 以降のデフォルトです)。(Ie4340、b/326456246)
  • ViewModel.onCleared クリア シーケンスを文書化します。(I586c7、b/363984116)

バージョン 2.9.0-alpha07

2024 年 11 月 13 日

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

Kotlin マルチプラットフォームの互換性

  • Lifecycle ViewModel SavedState が KMP に対応しました。これにより、共通コードで SavedStateHandle を使用できます。(Ib6394、b/334076622)

KotlinX シリアル化のサポート

  • SavedState 1.3.0-alpha05 で KotlinX シリアル化のサポートが追加されたため、saved(遅延プロパティ デリゲート)を導入しました。これにより、@Serializable クラスを SavedStateHandle に簡単に保存し、プロセスの終了と再作成時にそれらのクラスを自動的に復元できます。saved デリゲートは遅延評価されるため、アクセスされるまで init ラムダを呼び出したり、SavedStateHandle に何も保存したりしないことに注意してください。(I47a88、b/376026744)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

API の変更

  • MutableStateFlow を返すために SavedStateHandle に getMutableStateFlow を追加します。この新しい関数は鍵専用であり、getLiveData では使用できません。両方を使用して同じ状態にアクセスしようとすると、例外がスローされます。(I04a4f、b/375408415)

バージョン 2.9.0-alpha06

2024 年 10 月 30 日

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

動作の変更

  • Lifecycle.DESTROYED 状態は終了状態であり、Lifecycle をこの状態から別の状態に移行しようとすると、IllegalStateException が発生するようになりました。(I116c4、b/370577987)
  • 返された Bundle が空の場合、SavedStateHandle に SavedStateProvider.saveState() が含まれなくなりました。(I910b5、b/370577987)

バグの修正

  • Lifecycle が DESTROYED の場合、Lifecycle.eventFlow が正しく完了するようになりました(I293b2、b/374043130)

バージョン 2.9.0-alpha05

2024 年 10 月 16 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha05 がリリースされました。重要な変更はありません。バージョン 2.9.0-alpha05 にはこれらの commit が含まれています。

バージョン 2.9.0-alpha04

2024 年 10 月 2 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha04 がリリースされました。バージョン 2.9.0-alpha04 には、これらの commit が含まれています。

Kotlin マルチプラットフォーム

  • lifecycle-viewmodel-savedstate モジュールは、今後のリリースで SavedStateHandle などの API が共通ソースセットで利用可能になることに備えて、KMP 互換になるように構成されています。(I503ed、I48764、b/334076622)

バージョン 2.9.0-alpha03

2024 年 9 月 18 日

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

バグの修正

  • Lifecycle 2.8.6 以降: NullSafeMutableLiveData Lint エラーでスマート キャストのサポートが改善され、誤検出が回避されるようになりました。(85fed6、b/181042665)

依存関係の更新

バージョン 2.9.0-alpha02

2024 年 9 月 4 日

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

バグの修正

  • Lifecycle 2.8.5 以降: 難読化を許可するように androidx.lifecycle.ReportFragment ProGuard ルールを更新しました。(ff898e1)

外部からの協力

  • androidx.compose.ui.platform.LocalLifecycleOwner を共通ソースセット(KMP)に移動します。JetBrains の Ivan Matkov 氏に感謝いたします。(8cd5d03)
  • Lifecycle 2.8.5: SavedStateHandle.saveable` 拡張機能デリゲートが null 許容値をサポートするようになりました。Roman Kalukiewicz さん、ご協力ありがとうございました。(0d78ea6)

バージョン 2.9.0-alpha01

2024 年 8 月 7 日

androidx.lifecycle:lifecycle-*:2.9.0-alpha01 がリリースされました。バージョン 2.9.0-alpha01 には、これらの commit が含まれています。

Kotlin マルチプラットフォーム

  • lifecycle-testing が KMP に対応しました。(Iea41e)
  • linuxArm64 Kotlin マルチプラットフォーム ターゲットのサポートを追加しました(I139d3、b/338268719)

新機能

  • 新しい androidx.lifecycle:lifecycle-viewmodel-testing KMP アーティファクトが利用可能になりました。このアーティファクトは、onCleared(すべてのプラットフォーム)と SavedStateHandle(Android のみ)をサポートし、ViewModel を単独でテストするための ViewModelScenario クラスを提供します。(337f68d、c9b3409、9799a95c、b/264602919)
  • ViewModelProvider を使用した ViewModel の作成がスレッドセーフになりました。@MainThread アノテーションが削除されました。(Ifd978、b/237006831)

API の変更

  • 匿名の CreationExtras.Key オブジェクトの作成を簡素化するために、CreationExtras.Key() Factory 関数を追加しました。(I970ee)
  • CreationExtras には、Kotlin でコンテンツをわかりやすく操作するためのマップのような演算子オーバーロードが含まれるようになりました。CreationExtras で in、+=、+ を使用できます。(Ib4353)
  • CreationExtras に equals、hashCode、toString の各メソッドが実装されました。(Ib4353)
  • NewInstanceFactory が JVM デスクトップと Android ターゲットで利用できるようになりました。(d3d0892)
  • Kotlin 言語バージョン 2.0 で基盤となる Application を安全に公開するためのインライン拡張プロパティ(I39df2)

バグの修正

  • AGP 7.3 以降(R8 バージョン 3.3 など)で R8 を使用する場合、API モデリングによって自動的に行われるため、新しいプラットフォーム API へのアクセスの手動でのアウトライン設定を削除しました。また、AGP 8.1 以降(D8 バージョン 8.1 など)を使用する場合、すべてのビルドで自動的に行われるため、手動でのアウトライン設定を削除しました。AGP を使用していないクライアントは、D8 バージョン 8.1 以降に更新することをおすすめします。詳しくは、こちらの記事をご覧ください。(If6b4c、b/345472586)

バージョン 2.8

バージョン 2.8.7

2024 年 10 月 30 日

androidx.lifecycle:lifecycle-*:2.8.7 がリリースされました。バージョン 2.8.7 にはこれらの commit が含まれています。

API の変更

  • androidx.compose.ui.platform.LocalLifecycleOwner が共通ソースセット(KMP)で利用できるようになりました。(6a3f5b3)
  • lifecycle-runtime-compose: desktop アーティファクトが削除され、-jvmStubs アーティファクトと -linuxx64Stubs アーティファクトが追加されました。これらのターゲットは使用されることを想定しておらず、Jetbrains Compose の取り組みを支援するためのプレースホルダです。(6a3f5b3)

バージョン 2.8.6

2024 年 9 月 18 日

androidx.lifecycle:lifecycle-*:2.8.6 がリリースされました。バージョン 2.8.6 にはこれらの commit が含まれています。

バグの修正

  • NullSafeMutableLiveData Lint エラーでスマートキャストのサポートが改善され、誤検出が回避されるようになりました。(85fed6、b/181042665)

依存関係の更新

バージョン 2.8.5

2024 年 9 月 4 日

androidx.lifecycle:lifecycle-*:2.8.5 がリリースされました。バージョン 2.8.5 にはこれらの commit が含まれています。

バグの修正

  • 難読化を許可するように androidx.lifecycle.ReportFragment ProGuard ルールを更新します。(ff898e1)

外部からの協力

  • SavedStateHandle.saveable 拡張機能デリゲートで null 許容値がサポートされるようになりました。Roman Kalukiewicz さん、ご協力ありがとうございました。(0d78ea6)

バージョン 2.8.4

2024 年 7 月 24 日

androidx.lifecycle:lifecycle-*:2.8.4 がリリースされました。バージョン 2.8.4 にはこれらの commit が含まれています。

バグの修正

  • LiveData.asFlow() は、LiveData にすでに設定されている値を受け取った直後に返された Flow が完了するケース(take(1) を使用する場合など)を正しく処理するようになりました。(I9c566)
  • Lifecycle*Effect の完了がべき等になりました(つまり、Lifecycle の停止が原因で onStopOrDispose が呼び出された場合、Lifecycle が再び STARTED に戻らない限り、破棄時に 2 回目は呼び出されません)。(I5f607、b/352364595)

バージョン 2.8.3

2024 年 7 月 1 日

androidx.lifecycle:lifecycle-*:2.8.3 がリリースされました。バージョン 2.8.3 にはこれらの commit が含まれています。

バグの修正

  • コード圧縮を使用している場合に、Lifecycle 2.8 の Compose 1.6.0 以前との下位互換性に関する問題を修正しました。(aosp/3133056、b/346808608)

バージョン 2.8.2

2024 年 6 月 12 日

androidx.lifecycle:lifecycle-*:2.8.2 がリリースされました。バージョン 2.8.2 にはこれらの commit が含まれています。

バグの修正

  • Compose 1.6.X 以前で Lifecycle 2.8.X を使用したときに発生する CompositionLocal LocalLifecycleOwner not present エラーを修正しました。これで、回避策なしで、Compose のどのバージョンでも Lifecycle 2.8.2 を使用できるようになりました。(aosp/3105647、b/336842920)
  • compileOnly Lifecycle 依存関係の以前のバージョンとバージョン 2.8 以降を混在させたときに ViewModelProvider がクラッシュしなくなり、LeakCanary などのライブラリに関する問題が修正されました。(I80383、b/341792251)

バージョン 2.8.1

2024 年 5 月 29 日

androidx.lifecycle:lifecycle-*:2.8.1 がリリースされました。バージョン 2.8.1 にはこれらの commit が含まれています。

バグの修正

  • lifecycle-viewmodel-compose は compose-runtime への共通依存関係のみを持ち、compose-ui への共通依存関係はなくなりました。Android アーティファクトは、互換性のために compose-ui を保持します。(aosp/3079334、b/339562627)
  • プロパティ デリゲートを使用する ViewModel の saveable 統合で、自動生成されたキーの一部としてクラス名が使用されるようになりました。これにより、複数のクラスで同じ SavedStateHandle が使用されている場合でも競合が回避されます。(aosp/3063463)

バージョン 2.8.0

2024 年 5 月 14 日

androidx.lifecycle:lifecycle-*:2.8.0 がリリースされました。バージョン 2.8.0 にはこれらの commit が含まれています。

2.7.0 以降の重要な変更

  • Compose ベースのヘルパー API を Compose UI の外部で使用できるように、LocalLifecycleOwner が Compose UI から lifecycle-runtime-compose に移動されました。
  • lifecycle-runtime-compose アーティファクトに dropUnlessResumed API と dropUnlessStarted API が含まれるようになりました。これにより、LifecycleOwner が指定された Lifecycle.State を下回った後でも、クリックなどのイベントをドロップできます。たとえば、Navigation Compose でこれを使用すると、別の画面への切り替えがすでに開始された後にクリック イベントを処理することを回避できます。onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope がオーバーライド可能なコンストラクタ パラメータになり、独自のディスパッチャと SupervisorJob() を挿入したり、runTest 内で使用可能な backgroundScope を使用してデフォルトをオーバーライドしたりできるようになりました。(I2817c、b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel が Kotlin で書き換えられ、Closeable ではなく AutoClosable を使用するようになりました。getCloseable() を介して取得できる key を使用して AutoCloseable オブジェクトを追加できるようになりました。

  • キーなしで LifecycleStartEffect と LifecycleResumeEffect を呼び出すと、これらの API がミラーリングする DisposableEffect API と同じ規則に従って、エラーが返されるようになりました。

  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) を非推奨とし、LiveData.toPublisher(lifecycleOwner) に置き換えました。

  • lifecycle-livedata-core-ktx Kotlin 拡張機能が lifecycle-livedata-core モジュールに移動しました。

  • NullSafeMutableLiveData は、多くの誤検出を回避するためにリファクタリングされました。

Lifecycle Kotlin マルチプラットフォームの互換性

Lifecycle、LifecycleOwner、LifecycleObserver、Lifecycle.State、Lifecycle.Event、LifecycleRegistry のコア ライフサイクル API が、Kotlin マルチプラットフォームと互換性のあるアーティファクトで提供されるようになりました。

影響を受けるアーティファクト:

  • lifecycle-common は、ほとんどの API を common に移動し、Android に加えて jvm と iOS をサポートします。
  • lifecycle-runtime では、ほとんどの API が common に移動し、Android に加えて jvm と iOS がサポートされます。
  • lifecycle-runtime-ktx は空になり、すべての API が lifecycle-runtime に移動しました。
  • lifecycle-runtime-compose はすべての API を common に移動し、androidx.compose のマルチプラットフォーム サポートに一致する Android アーティファクトをリリースします。

ViewModel の Kotlin マルチプラットフォームとの互換性

lifecycle-viewmodel アーティファクトと ViewModel、ViewModelStore、ViewModelStoreOwner、ViewModelProvider などの API が、Kotlin Multiplatform と互換性のあるアーティファクトで提供されるようになりました。

この変更に対応するため、java.lang.Class<T> を受け取っていた ViewModelProvider のメソッドなどには、kotlin.reflect.KClass<T> を受け取る同等のメソッドが用意されています。

Android のバイナリ互換性は維持されていますが、Android API サーフェスと共通 API サーフェスを比較すると、いくつかの重要な変更点があります。

  • ViewModelProvider インスタンスの構築は、コンストラクタを直接呼び出すのではなく、ViewModelProvider.create() メソッドを介して行われるようになりました。
  • ViewModelProvider.NewInstanceFactory と ViewModelProvider.AndroidViewModelFactory は Android でのみ利用できます。
    • カスタム ファクトリは、ViewModelProvider.Factory から拡張し、CreationExtras を受け取る create メソッドを使用するか、viewModelFactory Kotlin DSL を使用することをおすすめします。
  • JVM 以外のプラットフォームでカスタム Factory なしで ViewModelProvider を使用すると、UnsupportedOperationException が発生します。JVM プラットフォームでは、カスタム ファクトリが提供されていない場合、引数なしの ViewModel コンストラクタを使用することで互換性が維持されます。
  • Dispatchers.Main が利用できないプラットフォーム(Linux など)では、viewModelScope は EmptyCoroutineContext にフォールバックします。

影響を受けるアーティファクト:

  • lifecycle-viewmodel では、ほとんどの API が common に移動し、Android に加えて jvm と iOS がサポートされます。
  • lifecycle-viewmodel-ktx は空になり、すべての API が lifecycle-viewmodel に移動しました。
  • lifecycle-viewmodel-compose はすべての API を common に移動し、androidx.compose のマルチプラットフォーム サポートに一致する Android アーティファクトをリリースします。

動作の変更

  • InitializerViewModelFactory(viewModelFactory ビルダー関数を含む)は、同じ clazz: KClass<VM : ViewModel> を持つ initializer がすでに追加されている場合、IllegalArgumentException をスローするようになります。(Ic3a36)

既知の問題

バージョン 2.8.0-rc01

2024 年 5 月 1 日

androidx.lifecycle:lifecycle-*:2.8.0-rc01 がリリースされました。バージョン 2.8.0-rc01 には、これらの commit が含まれています。

バグの修正

  • lifecycle-common クラスのベースライン プロファイルが正しくパッケージ化されない問題を修正しました。これらは lifecycle-runtime AAR にパッケージ化されています。(aosp/3038274、b/322382422)
  • ViewModel にアタッチされた AutoCloseable インスタンスのクリア方法における意図しない順序の変更を修正しました。以前の順序(addCloseable(String, AutoCloseable)、addClosable(AutoCloseable)、onCleared() の順)が復元されました。(aosp/3041632)
  • ネイティブ環境と JVM デスクトップ環境の viewModelScope のデフォルトの作成動作を改善しました。(aosp/3039221)

外部からの協力

  • JVM Desktop でメインスレッドのチェックを改善してくださった Victor Kropp に感謝します。(aosp/3037116)

バージョン 2.8.0-beta01

2024 年 4 月 17 日

androidx.lifecycle:lifecycle-*:2.8.0-beta01 がリリースされました。バージョン 2.8.0-beta01 にはこれらの commit が含まれています。

新機能

  • lifecycle-runtime-compose アーティファクトが Kotlin Multiplatform と互換性を持つようになり、コードが common に移動され、Android アーティファクトが提供されるようになりました。これにより、androidx.compose のマルチプラットフォーム サポートと一致するようになります。(If7a71、I4f4a0、b/331769623)

バージョン 2.8.0-alpha04

2024 年 4 月 3 日

androidx.lifecycle:lifecycle-*:2.8.0-alpha04 がリリースされました。バージョン 2.8.0-alpha04 には、これらの commit が含まれています。

新機能

  • lifecycle-viewmodel-compose アーティファクトが Kotlin Multiplatform と互換性を持つようになり、コードが common に移動され、androidx.compose のマルチプラットフォーム サポートに合わせて Android アーティファクトが出荷されるようになりました。この変更に対応するため、コンポーザブル viewModel メソッドは java.lang.Class に加えて KClass も受け取るようになりました。(b/330323282)

バグの修正

  • NullSafeMutableLiveData は、多くの誤検出を回避するためにリファクタリングされました。(I2d8c1、Iafb18、I03463、I7ecef)

依存関係の更新

  • lifecycle-viewmodel-compose アーティファクトが Compose 1.6.0 に依存するようになりました。
  • Lifecycle が Profile Installer 1.3.1 に依存するようになりました。

バージョン 2.8.0-alpha03

2024 年 3 月 20 日

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

新機能

  • ViewModel.viewModelScope がオーバーライド可能なコンストラクタ パラメータになり、独自のディスパッチャと SupervisorJob() を挿入したり、runTest 内で使用可能な backgroundScope を使用してデフォルトをオーバーライドしたりできるようになりました。(I2817c、b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

Kotlin マルチプラットフォームの互換性

lifecycle-viewmodel アーティファクトと ViewModel、ViewModelStore、ViewModelStoreOwner、ViewModelProvider などの API が、Kotlin Multiplatform と互換性のあるアーティファクトで提供されるようになりました。(b/214568825)

この変更に対応するため、java.lang.Class<T> を受け取っていた ViewModelProvider のメソッドなどには、kotlin.reflect.KClass<T> を受け取る同等のメソッドが用意されています。

Android のバイナリ互換性は維持されていますが、Android API サーフェスと共通 API サーフェスを比較すると、いくつかの重要な変更点があります。

  • ViewModelProvider インスタンスの構築は、コンストラクタを直接呼び出すのではなく、ViewModelProvider.create() メソッドを介して行われるようになりました。
  • ViewModelProvider.NewInstanceFactory と ViewModelProvider.AndroidViewModelFactory は Android でのみ利用できます。
    • カスタム ファクトリは、ViewModelProvider.Factory から拡張し、CreationExtras を受け取る create メソッドを使用するか、viewModelFactory Kotlin DSL を使用することをおすすめします。
  • JVM 以外のプラットフォームでカスタム Factory なしで ViewModelProvider を使用すると、UnsupportedOperationException が発生します。JVM プラットフォームでは、カスタム ファクトリが提供されていない場合、引数なしの ViewModel コンストラクタを使用することで互換性が維持されます。
  • Dispatchers.Main が利用できないプラットフォーム(Linux など)では、viewModelScope は EmptyCoroutineContext にフォールバックします。

動作の変更

  • InitializerViewModelFactory(viewModelFactory ビルダー関数を含む)は、同じ clazz: KClass<VM : ViewModel> を持つ initializer がすでに追加されている場合、IllegalArgumentException をスローするようになります。(Ic3a36)

バグの修正

  • ViewModel.getCloseable で重複するキーが処理されるようになりました。key に AutoCloseable リソースがすでに存在する場合、古いリソースはすぐに置き換えられて閉じられます。(Ibeb67)
  • ViewModel の viewModelScope へのアクセスがスレッドセーフになりました。(If4766、b/322407038)

外部からの協力

  • LocalLifecycleOwner が Compose UI から lifecycle-runtime-compose に移動し、Compose ベースのヘルパー API を Compose UI の外部で使用できるようになりました。Jake Wharton さん、ご協力ありがとうございました。(I6c41b、b/328263448)

バージョン 2.8.0-alpha02

2024 年 2 月 21 日

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

新機能

  • LifecycleOwner が指定された Lifecycle.State を下回った後でも発生するクリックなどのイベントをドロップできる dropUnlessResumed API と dropUnlessStarted API が追加されました。たとえば、Navigation Compose で使用して、別の画面への遷移がすでに開始された後にクリック イベントが処理されないようにすることができます。onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }(Icba83、b/317230685)

Kotlin 変換

  • ViewModel が Kotlin で記述されるようになりました。(I16f26、b/214568825)
  • lifecycle-viewmodel-ktx Kotlin 拡張機能がベース ライフサイクル モジュールに移動しました。(Id787b、b/274800183)
  • lifecycle-runtime-ktx Kotlin 拡張機能がベース ライフサイクル モジュールに移動しました。(Ic3686、b/274800183)
  • lifecycle-livedata-core-ktx Kotlin 拡張機能がベース ライフサイクル モジュールに移動しました。(I54a3d、b/274800183)

Kotlin マルチプラットフォームの互換性

  • Lifecycle、LifecycleOwner、LifecycleObserver、Lifecycle.State、Lifecycle.Event、LifecycleRegistry のコア ライフサイクル API が、Kotlin マルチプラットフォームと互換性のあるアーティファクトで提供されるようになりました。(b/317249252)

API の変更

  • キーなしで LifecycleStartEffect と LifecycleResumeEffect を呼び出すと、これらの API がミラーリングする DisposableEffect API と同じ規則に従って、エラーが発生するようになりました。(Ib0e0c、b/323518079)
  • ViewModel は Closeable ではなく AutoCloseable を使用するようになりました。これは下位互換性のある変更です。(I27f8e、b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) を非推奨とし、LiveData.toPublisher(lifecycleOwner) に置き換えました。(Iabe29、b/262623005)

外部からの協力

  • Lifecycle を Kotlin マルチプラットフォームに移行するにあたり、Jetbrains の Ivan Matkov 氏にご協力いただきました。(aosp/2926690、I0c5ac、If445d)

バージョン 2.8.0-alpha01

2024 年 1 月 24 日

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

新機能

  • ViewModel で、getCloseable() を介して取得できる key を使用した Closeable オブジェクトの追加がサポートされるようになりました。(I3cf63)

バージョン 2.7

バージョン 2.7.0

2024 年 1 月 10 日

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

2.6.0 以降の重要な変更

  • TestLifecycleOwner に、状態の変更とすべての LifecycleObserver コールバックが完了してから戻ることを保証する一時停止関数 setCurrentState() が追加されました。特に、currentState プロパティを直接設定する場合とは異なり、この方法では runBlocking を使用しないため、runTest が提供するコルーチンなどのコルーチン内で安全に使用できます。
  • map と switchMap の LiveData 拡張機能は、distinctUntilChanged の動作を反映するようになりました。LiveData に value が設定されている場合、map/switchMap 関数が直ちに呼び出され、返された LiveData の value が入力されます。これにより、最初のコンポーズの一部として初期値が設定されます(observeAsState() と併用した場合)。ただし、監視の動作は変更されません。ソースの LiveData から更新された値は引き続き、LiveData の監視を開始した後にのみ、適用されることになります。
  • このリリースでは、プロセスの終了と再作成の後に SavedStateHandle がカスタム Parcelable クラスを適切に復元しない問題を修正しました。Android フレームワークによって失われる型情報のため、カスタム Parcelable の配列には追加の作業(正しい型の型付き配列の手動作成)が必要であり、get、getLiveData、getStateFlow のドキュメントでこの制限が明示的に言及されるようになりました。
  • LifecycleObserver に関連付けられている proguard keep ルールが削除されました。つまり、リフレクションを介して API を使用する(たとえば、廃止された @OnLifecycleEvent アノテーションを使用する)proguard されたコードは、特定のユースケースに合わせて独自の keep ルールを提供する必要があります。

ライフサイクル イベントのオブザーバビリティ

  • LifecycleEventObserver を使用する代わりに、Lifecycle.asFlow() 拡張メソッドを使用して Lifecycle.Event の Flow を監視できるようになりました。
  • Jetpack Compose ユーザーは、LifecycleEventEffect を使用して Lifecycle.Event に基づいて Compose サイドエフェクトを実行できるようになりました。
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose ユーザーは、LifecycleStartEffect と LifecycleResumeEffect を使用して、イベントのペア(開始から停止、再開から一時停止)をそれぞれ処理できます。この API は DisposableEffect にある API をミラーリングしたもので、状態が上昇するときに行われた変更を下降するときに元に戻す必要がある場合に適しています。
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

詳細については、ライフサイクル イベントでコードを実行するをご覧ください。

ライフサイクル状態のオブザーバビリティ

  • 現在の Lifecycle.State は Lifecycle.currentStateFlow プロパティで確認できるようになりました。このプロパティは、value が現在の Lifecycle.State である StateFlow を返します。
  • Jetpack Compose ユーザーは、Lifecycle.currentStateAsState() 拡張機能を使用して、Lifecycle.State を Compose の State として直接公開できます。これは lifecycle.currentStateFlow.collectAsState() と同等(かつより短い代替手段)です。

詳細については、フローを使ってライフサイクルの状態を収集するをご覧ください。

バージョン 2.7.0-rc02

2023 年 12 月 13 日

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

バグの修正

  • SavedStateHandle がプロセス終了と再作成後にカスタムの Parcelable クラスを適切に復元しない問題を修正しました。Android フレームワークによって失われる型情報のため、カスタム Parcelable の配列には追加の作業(正しい型の型付き配列の手動作成)が必要になります。get、getLiveData、getStateFlow のドキュメントでは、この制限について明示的に言及しています。(I0b55a)

バージョン 2.7.0-rc01

2023 年 11 月 15 日

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

バグの修正

  • LifecycleOwner が変更された場合、LifecycleStartEffect と LifecycleResumeEffect がエフェクトブロックを正しく破棄して再作成するようになりました。(Ia25c6)

バージョン 2.7.0-beta01

2023 年 11 月 1 日

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

  • ベータ版のバージョンアップです。このリリース バージョンに大きな変更はありません。

バージョン 2.7.0-alpha03

2023 年 10 月 18 日

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

新機能

  • lifecycle-runtime-testing に、コルーチン内で currentState フィールドを使用して TestLifecycleOwner の Lifecycle.State を設定することを回避する新しい Lint チェックが追加されました。Lint チェックで、ブロックせずに Lifecycle.State を設定できる setCurrentState の一時停止が提案されるようになりました。(Icf728、b/297880630)

バグの修正

  • LiveData.switchMap で、初回呼び出しと後続の呼び出しの両方で同じ LiveData インスタンスを返すと、LiveData インスタンスがソースとして追加されない問題を修正しました。(Ibedcba7)

バージョン 2.7.0-alpha02

2023 年 9 月 6 日

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

新機能

  • TestLifecycleOwner には、suspend 関数 setCurrentState() が含まれるようになりました。これにより、ユーザーは runTest が提供するコルーチン内から TestLifecycleOwner を使用できるようになります。(I329de、b/259344129)

API の変更

  • lifecycle-livedata-ktx モジュールのすべてのファイルがメインの lifecycle-livedata モジュールに移動しました。(I10c6f、b/274800183)

動作の変更

  • LiveData.map() 拡張機能と LiveData.switchMap() 拡張機能は、以前の LiveData に値が設定されている場合、返された LiveData の value を設定するようになりました。これにより、Jetpack Compose で結果の LiveData を使用すると、初期コンポジションで正しい状態が維持されます。(I91d2b、b/269479952)
  • ViewModel の addCloseable() は、ViewModel がすでに onCleared() への呼び出しを受信している場合、Closeable をすぐに閉じます。(I4712e、b/280294730)

バグの修正

  • Lifecycle 2.6.2 から: 状態が復元され、親 SavedStateRegistry に状態を実際に保存せずに save() が呼び出され、その後状態が再度復元された場合、プロセスの終了後に SavedStateHandle が正しく復元されない問題を修正しました。これにより、rememberSaveable と Navigation Compose の NavHost との間のやり取りが修正されます。(aosp/2729289)

バージョン 2.7.0-alpha01

2023 年 7 月 26 日

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

API の変更

  • Lifecycle.State が Lifecycle.currentStateFlow を介して Compose で監視可能になりました。Lifecycle.currentStateFlow は、value が現在の Lifecycle.State である StateFlow を返します。(Ib212d、b/209684871)
  • Lifecycle.Event を Lifecycle.asFlow(). を使用して Flow として監視できるようになりました(If2c0f、b/176311030)
  • Lifecycle.Event.ON_RESUME と Lifecycle.Event.ON_PAUSE の両方のイベント コールバックに基づいて Compose SideEffect を実行する LifecycleResumeEffect API が追加されました。(I60386、b/235529345)
  • Lifecycle.Event.ON_START と Lifecycle.Event.ON_STOP のイベント コールバックに基づいて Compose SideEffect を実行する LifecycleStartEffect API が追加されました。(I5a8d1、b/235529345)
  • Lifecycle.Event に基づいて Compose SideEffect を実行する LifecycleEventEffect API が追加されました。(Ic9794、b/235529345)
  • Lifecycle.collectAsState() 拡張機能が追加され、Compose の State として Lifecycle.State を直接公開できるようになりました。これは lifecycle.currentStateFlow.collectAsState() と同等であり、より短い代替手段です。(I11015、b/235529345)

バグの修正

  • LiveData.distinctUntilChanged() 拡張機能は、以前の LiveData に値が設定されている場合、返された LiveData の value を設定するようになりました。これによって監視の動作が変わることはありません。ソースの LiveData から更新された値は引き続き、distinctUntilChanged() から返される LiveData の監視を開始した後にのみ、適用されることになります。(Ib482f)
  • LifecycleObserver に関連付けられている proguard keep ルールが削除されました。つまり、リフレクションを介して API を使用する ProGuard コードは、特定のユースケースに合わせて独自の保持ルールを提供する必要があります。(Ia12fd)

バージョン 2.6

バージョン 2.6.2

2023 年 9 月 6 日

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

バグの修正

  • 状態が復元され、親 SavedStateRegistry に状態を実際に保存せずに save() が呼び出され、その後状態が再度復元された場合、プロセス終了後に SavedStateHandle が正しく復元されない問題を修正しました。これにより、rememberSaveable と Navigation Compose の NavHost との間のやり取りが修正されます。(aosp/2729289)

バージョン 2.6.1

2023 年 3 月 22 日

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

依存関係の更新

バージョン 2.6.0

2023 年 3 月 8 日

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

2.5.0 以降の重要な変更

  • LiveData に明示的な値が設定されたことがあるかどうかを示す新しい isInitialized プロパティが、LiveData に追加されました。これにより、値が設定されたことがない liveData.value により返された null 値か、明示的に返された null 値かを区別できるようになりました。
  • MediatorLiveData に初期値を設定するためのコンストラクタが追加されました。
  • collectAsStateWithLifecycle() の StateFlow と Flow に、フローから収集してライフサイクル対応の方法で Compose の状態として最新の値を表す拡張機能を追加しました。
  • Lifecycle.launchWhenX のメソッドと Lifecycle.whenX のメソッドが非推奨になりました。一時停止しているディスパッチャを使用するとリソースが無駄になることがあったためです。Lifecycle.repeatOnLifecycle を使用することをおすすめします。一時的な作業の中断について詳しくは、こちらで、一時的な作業の中断が本質的に安全でない理由について説明しています。
  • Kotlin への変換 - 多数の Lifecycle クラスが Kotlin に変換されました。変換されたクラスはすべて、以前のバージョンとのバイナリ互換性を維持しています。次のクラスには、Kotlin で記述されたクラスに対するソース互換性のない変更があります: ViewTreeLifecycleOwner、LiveDataReactiveStreams、HasDefaultViewModelProviderFactory、ViewTreeViewModelStoreOwner、Transformations、ViewModelStoreOwner、LifecycleOwner

次の表に、ライフサイクルの新しいバージョンのソース変換を示します。

Lifecycle 2.5 Lifecycle 2.5(KTX) Lifecycle 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • Kotlin で作成された Observer の onChanged メソッドの null 可能性が、ジェネリック型の null 可能性と一致するようになりました。Observer.onChanged() で null 値許容型を受け入れる場合は、null 値許容型で Observer をインスタンス化する必要があります。
  • これらのクラスも Kotlin に変換されましたが、ソース互換性は維持されています。DefaultLifecycleObserver、LifecycleEventObserver、Lifecycle、LifecycleRegistry、LifecycleObserver、ViewModelStore、AndroidViewModel、AbstractSavedStateViewModelFactory、LifecycleService、ServiceLifecycleDispatcher、ProcessLifecycleOwner

バージョン 2.6.0-rc01

2023 年 2 月 22 日

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

バグの修正

  • LiveData.distinctUntilChanged() 拡張機能は、以前の LiveData に値が設定されている場合、返された LiveData の value を設定するようになりました。これによって監視の動作が変わることはありません。ソースの LiveData から更新された値は引き続き、distinctUntilChanged() から返される LiveData の監視を開始した後にのみ、適用されることになります。(Ib482f)

バージョン 2.6.0-beta01

2023 年 2 月 8 日

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

Kotlin 変換

  • LifecycleOwner が Kotlin で記述されるようになりました。Kotlin で記述されたコードに対するソース互換性のない変更であるため、以前の getLifecycle() 関数を実装するのではなく、lifecycle プロパティをオーバーライドしなければならなくなりました。(I75b4b、b/240298691)
  • ViewModelStoreOwner が Kotlin で記述されるようになりました。Kotlin で記述されたコードに対するソース互換性のない変更であるため、以前の getViewModelStore() 関数を実装するのではなく、viewModelStore プロパティをオーバーライドしなければならなくなりました。(I86409、b/240298691)
  • lifecycleScope フィールドを提供する LifecycleOwner の Kotlin 拡張機能が lifecycle-runtime-ktx から lifecycle-common アーティファクトに移動しました。(I41d78、b/240298691)
  • coroutineScope フィールドを提供する Lifecycle の Kotlin 拡張機能が lifecycle-runtime-ktx から lifecycle-common アーティファクトに移動しました。(Iabb91、b/240298691)

バージョン 2.6.0-alpha05

2023 年 1 月 25 日

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

Kotlin 変換

  • Transformations が Kotlin で記述されるようになりました。これは、Transformations.map などの構文を直接使用して Kotlin で記述されたクラスに対する、ソース互換性のない変更となります。Kotlin コードは、Kotlin 拡張メソッド構文を使用することが必要になります。この構文は以前は lifecycle-livedata-ktx を使用している場合にのみ使用可能だったものです。Java プログラミング言語を使用している場合、androidx.arch.core.util.Function メソッドを受け取るこれらのメソッドのバージョンは非推奨となり、Kotlin の Function1 を受け取るバージョンが代わりとなります。この変更はバイナリ互換性を維持します。(I8e14f)
  • ViewTreeViewModelStoreOwner が Kotlin で記述されるようになりました。これは Kotlin で記述されたクラスに対するソース互換性のない変更です。以前に設定したオーナーを設定、確認するには、androidx.lifecycle.setViewTreeViewModelStoreOwner と androidx.lifecycle.findViewTreeViewModelStoreOwner の View で Kotlin 拡張メソッドを直接インポートして使用する必要があります。Java プログラミング言語で記述された実装に対しては、バイナリ互換性があり、ソース互換性を維持しています。(Ia06d8、Ib22d8、b/240298691)
  • HasDefaultViewModelProviderFactory インターフェースが Kotlin で記述されるようになりました。これは Kotlin で記述されたクラスに対するソース互換性のない変更となります。これまで対応していた関数を実装するのではなく、defaultViewModelProviderFactory プロパティと defaultViewModelCreationExtras プロパティをオーバーライドすることが必要になります。(Iaed9c、b/240298691)
  • Observer が Kotlin で記述されるようになりました。onChanged() メソッドのパラメータに value という名前を使用するようになりました。(Iffef2、I4995e、b/240298691)
  • AndroidViewModel、AbstractSavedStateViewModelFactory、LifecycleService、ServiceLifecycleDispatcher、ProcessLifecycleOwner が Kotlin で記述されるようになりました。(I2e771、Ibae40、I160d7、I08884、I1cda7、b/240298691)

バージョン 2.6.0-alpha04

2023 年 1 月 11 日

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

新機能

  • LiveData に明示的な値が設定されたことがあるかどうかを示す新しい isInitialized プロパティが、LiveData に追加されました。これにより、値が設定されたことがない liveData.value により返された null 値か、明示的に返された null 値かを区別できるようになりました。(Ibd018)

API の変更

  • lifecycle-runtime-compose の collectAsStateWithLifecycle() API が試験運用版ではなくなりました。(I09d42、b/258835424)
  • Lifecycle.launchWhenX のメソッドと Lifecycle.whenX のメソッドが非推奨になりました。一時停止しているディスパッチャを使用するとリソースが無駄になることがあったためです。Lifecycle.repeatOnLifecycle を使用することをおすすめします。(Iafc54、b/248302832)

Kotlin 変換

  • ViewTreeLifecycleOwner が Kotlin で記述されるようになりました。これは Kotlin で記述されたクラスに対するソース互換性のない変更です。以前に設定したオーナーを設定、確認するには、androidx.lifecycle.setViewTreeLifecycleOwner と androidx.lifecycle.findViewTreeLifecycleOwner の View で Kotlin 拡張メソッドを直接インポートして使用する必要があります。lifecycle-runtime-ktx にある以前の Kotlin 拡張機能に代わるものです。Java プログラミング言語で記述された実装に対しては、バイナリ互換性があり、ソース互換性を維持しています。(I8a77a、I5234e、b/240298691)
  • LiveDataReactiveStreams が Kotlin で記述されるようになりました。以前 lifecycle-reactivestreams-ktx にあった Kotlin 拡張機能が lifecycle-reactivestreams モジュールに移動し、Kotlin で記述されたコードのメインのサーフェスになりました。Kotlin 拡張メソッド API を使用していなかった場合は、Kotlin で記述されたコードに対するソース互換性のない変更となります。(I2b1b9、I95d22、b/240298691)
  • DefaultLifecycleObserver、LifecycleEventObserver、Lifecycle、LifecycleRegistry、LifecycleObserver、ViewModelStore が Kotlin で記述されるようになりました。(Iadffd、I60034、I8c52c、I9593d、I01fe1、I59a23、b/240298691)

バグの修正

  • 間違ったクラスタイプで get() を呼び出しても ClassCastException で SavedStateHandle がクラッシュしなくなりました。(I6ae7c)

バージョン 2.6.0-alpha03

2022 年 10 月 24 日

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

バグの修正

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

バージョン 2.6.0-alpha02

2022 年 9 月 7 日

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

API の変更

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

バグの修正

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

バージョン 2.6.0-alpha01

2022 年 6 月 29 日

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

新機能

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

バージョン 2.5

バージョン 2.5.1

2022 年 7 月 27 日

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

バグの修正

  • ステートフル AndroidViewModelFactory コンストラクタを Lifecycle 2.4 以降で使用している際に、AndroidViewModelFactory のカスタムの実装が create(modelClass) 関数を正しく呼び出せるようになりました。(I5b315、b/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-viewmodel が viewModelFactory 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.State を INITIALIZED から DESTROYED に変更しようとすると、Lifecycle にオブザーバーがアタッチされているかどうかにかかわらず、常に IllegalStateException がスローされるようになりました。
  • LifecycleRegistry は、オブザーバーが DESTROYED 状態に達したときにオブザーバーをクリアするようになりました。

バージョン 2.5.0-rc02

2022 年 6 月 15 日

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

バグの修正

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

バージョン 2.5.0-rc01

2022 年 5 月 11 日

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

バグの修正

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

バージョン 2.5.0-beta01

2022 年 4 月 20 日

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

API の変更

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

バグの修正

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

バージョン 2.5.0-alpha06

2022 年 4 月 6 日

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

新機能

  • rememberSaveable と同等の機能を実現するため、試験運用版の MutableState のオーバーロードを SavedStateHandle.saveable に追加しました。(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 に含まれる commit については、こちらをご覧ください。

新機能

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

API の変更

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

バグの修正

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

バージョン 2.5.0-alpha04

2022 年 3 月 9 日

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

API の変更

  • LiveData を使用する代わりに値の変更をモニタリングする Kotlin StateFlow を返す getStateFlow() API を SavedStateHandle が提供するようになりました。(Iad3ab、b/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-viewmodel が InitializerViewModelFactory を提供するようになりました。これにより、CreationExtras をメインのデータソースとして使用して、特定の ViewModel クラスを処理するためのラムダを追加できるようになります。(If58fc、b/216687549)
  • lifecycle-viewmodel-compose がラムダ ファクトリを受け取る viewModel() API を提供するようになりました。これにより、カスタムの ViewModelProvider.Factory を作成せずに、ViewModel インスタンスを作成できるようになります。(I97fbb、b/216688927)

API の変更

  • lifecycle-viewmodel-compose から CreationExtras で ViewModel を作成できるようになりました。(I08887、b/216688927)

動作の変更

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

バージョン 2.5.0-alpha02

2022 年 2 月 9 日

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

API の変更

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

動作の変更

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

バグの修正

  • Lifecycle 2.4.1 以降: ProcessLifecycleInitializer が StartupException をスローしないようにする修正をデフォルトで利用できるようにするため、Startup 1.1.1 に依存するように lifecycle-process を更新しました。(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 に含まれる commit については、こちらをご覧ください。

ViewModel CreationExtras

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

この変更により、ViewModelProvider は ViewModelProvider.Factory の以前の create(Class<T>) メソッドを直接呼び出すことはなくなりました。代わりに、create の新しいオーバーロードである create(Class<T>, CreationExtras) を呼び出します。ViewModelProvider.Factory インスタンスの直接実装は、この新しい CreationExtras のそれぞれに次のようにアクセスできます。

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: この String により、ViewModelProvider.get() に渡したカスタムキーにアクセスできます。
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY により、Application クラスにアクセスできます。
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY により、この ViewModel の作成に使用する SavedStateRegistryOwner にアクセスできます。
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY により、この ViewModel の作成に使用する ViewModelStoreOwner にアクセスできます。
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY により、SavedStateHandle の作成に使用する引数の Bundle にアクセスできます。

上記のエクストラは、Activity 1.5.0-alpha01、Fragment 1.5.0-alpha01、Navigation 2.5.0-alpha01 を使用する場合に、デフォルトで提供されます。これより前のバージョンのライブラリを使用すると、CreationExtras は空になります。ViewModelProvider.Factory の既存のサブクラスはすべて、前のバージョンのライブラリが使用する以前の作成パスと、今後使用される CreationExtras のパスの両方をサポートするよう書き換えられました。

この CreationExtras を使用することで、厳密な Factory サブクラスの階層に依存せずに、必要な情報のみを各 ViewModel に渡す ViewModelProvider.Factory を作成できます。

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

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

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

バグの修正

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

バージョン 2.4

バージョン 2.4.1

2022 年 2 月 9 日

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

バグの修正

  • 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 に含まれる 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。
  • DefaultLifecycleObserver が lifecycle.lifecycle-common-java8 から lifecycle.lifecycle-common に移動しました。lifecycle.lifecycle-common-java8 が lifecycle.lifecycle-common に機能を追加することがなくなったため、依存関係を lifecycle.lifecycle-common に置き換えることができます。
  • lifecycle-viewmodel-ktx からの非コルーチン API が lifecycle-viewmodel モジュールに移動しました。
  • lifecycle-process が androidx.startup を使用して ProcessLifecycleOwner を初期化するようになりました。

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

    過去にプロセスのライフサイクルの初期化に使用されていた ContentProvider で tools:node="remove" を使用していた場合は、以下のようにする必要があります。

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (または)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

バージョン 2.4.0-rc01

2021 年 9 月 29 日

androidx.lifecycle:lifecycle-*:2.4.0-rc01 がリリースされました。Lifecycle 2.4.0-beta01 からの変更はありません。バージョン 2.4.0-rc01 に含まれる 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-java8 が androidx.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 に追加しました。(706078、b/187887400)

API の変更

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

バグの修正

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

外部からの協力

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

バージョン 2.4.0-alpha01

2021 年 3 月 24 日

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

動作の変更

  • 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 を追加しました。これは新しい 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 を取得できるようになりました。(I2628d、b/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 との互換性が備わりました。(I6f9de、b/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-compose と androidx.navigation:navigation-compose が androidx.compose.compiler:compiler:1.0.0-beta04 と androidx.compose.runtime:runtime:1.0.0-beta04 に対する依存関係を同期できます。1.0.0 の場合、コンパイラとランタイムが一致する必要があります。

バージョン 1.0.0-alpha03

2021 年 3 月 10 日

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 に含まれる 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 の変更

  • 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 に含まれる 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 インスタンスを指定して、含まれている LifecycleOwner と ViewModelStoreOwner をそれぞれ取得できます。これを正しく入力するには、Activity 1.2.0、Fragment 1.3.0、AppCompat 1.3.0-alpha01 以降にアップグレードする必要があります。findViewTreeLifecycleOwner と findViewTreeViewModelStoreOwner の Kotlin 拡張機能は、lifecycle-runtime-ktx と lifecycle-viewmodel-ktx でそれぞれ利用できます。
  • LiveData.observe() Kotlin 拡張機能のサポート終了: ラムダ構文を使用するために必要な LiveData.observe() Kotlin 拡張機能のサポートが終了しました(Kotlin 1.4 を使用する際は不要となるため)。

バージョン 2.3.0-rc01

2020 年 12 月 16 日

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

バグの修正

  • SavedStateHandle の keys() メソッドについて、状態の保存前と保存後で整合性が保たれるようになりました。set() と getLiveData() で使用されるキーに加えて、これまで setSavedStateProvider() で使用されていたキーが含まれるようになりました。(aosp/1517919、b/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 が別のスレッドからアクセスされたときに適切な同期が行われることを保証する必要があります。(Ie7280、b/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 型のパラメータを持つ MutableLiveData に null 値が設定されているケースを大幅にカバーするようになりました。(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-alpha05、Fragment 1.3.0-alpha05、AppCompat 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-alpha01 と Fragment 1.3.0-alpha01 にアップグレードする必要があります。findViewTreeLifecycleOwner Kotlin 拡張機能は lifecycle-runtime-ktx で利用できます。(aosp/1182361、aosp/1182956)
  • Kotlin で非 null として定義されている MutableLiveData に null 値を設定すると警告する、新しい Lint チェックを追加しました。これは、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 に含まれる 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.0 に lifecycle-extensions が含まれる予定はないため、lifecycle-extensions ではなく、必要な Lifecycle アーティファクト(たとえば、LifecycleService を使用している場合は lifecycle-service、ProcessLifecycleOwner を使用している場合は 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 については、こちらをご覧ください。

バグの修正

  • モックされた ViewModel が ViewModelStore に保存され、後でデフォルト ファクトリでクエリが実行されたときに発生するエラーを修正しました。
  • 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.0 や 2.1.0 の lifecycle-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 については、こちらをご覧ください。

新機能

  • lifecycleScope、whenCreated、whenStarted、whenResumed、viewModelScope、また 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 の変更

  • SavedStateViewModelFactory は AbstractSavedStateViewModelFactory を拡張することはなく、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-savedstate が fragment に依存しなくなり、関連する SavedStateViewModelFactory(Fragment) と SavedStateViewModelFactory(FragmentActivity) のコンストラクタが削除されました。代わりに SavedStateViewModelFactory が、Activity 1.1.0-alpha02、Fragment 1.2.0-alpha02、Navigation 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 の変更

  • LifecycleRegistry に setCurrentState() メソッドが追加されました。このメソッドは、サポートが終了した 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 メソッドで key と Class を受け取る 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.Function が arch:runtime から arch:common に移動されました。これにより、(下記の paging:common のような)ランタイムの依存関係がなくてもこのメソッドを使用できるようになりました。

lifecycle:common は lifecycle:runtime の依存関係であるため、この変更による lifecycle:runtime への直接的な影響はありません。影響を受けるのは、Paging と同様に、lifecycle:common に直接依存するモジュールだけです。

バージョン 1.1.0

2018 年 1 月 22 日

パッケージの変更

以下の新しい、極めて小さな依存関係を利用できるようになりました。

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

API の変更

  • サポートが終了した LifecycleActivity と LifecycleFragment は削除されました。FragmentActivity、AppCompatActivity を使用するか、Fragment をサポートしてください。
  • @NonNull アノテーションが ViewModelProviders と ViewModelStores に追加されました。
  • ViewModelProviders コンストラクタのサポートが終了しました。その静的メソッドを直接使用してください。
  • ViewModelProviders.DefaultFactory のサポートが終了しました。ViewModelProvider.AndroidViewModelFactory を使用してください。
  • 静的な ViewModelProvider.AndroidViewModelFactory.getInstance(Application) メソッドが追加され、ViewModel インスタンスや AndroidViewModel インスタンスの作成に適した静的な Factory を取得できるようになりました。