Skip to content

ライフサイクル

Compose Multiplatformにおけるコンポーネントのライフサイクルは、Jetpack Composeのライフサイクルコンセプトから採用されています。ライフサイクルに対応したコンポーネントは、他のコンポーネントのライフサイクル状態の変化に反応でき、より整理され、多くの場合より軽量で、メンテナンスしやすいコードを作成するのに役立ちます。

Compose Multiplatformは共通のLifecycleOwner実装を提供します。これは、元のJetpack Composeの機能を他のプラットフォームに拡張し、共通コードでライフサイクル状態を監視するのに役立ちます。

マルチプラットフォームのLifecycle実装を使用するには、commonMainソースセットに以下の依存関係を追加してください。

kotlin
kotlin {
    // ...
    sourceSets {
        // ...
        commonMain.dependencies {
            // ...
            implementation("org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.2")
        }
        // ...
    }
}

マルチプラットフォームのLifecycle実装の変更は、当社の最新情報で追跡できます。または、Compose Multiplatform changelogで特定のEAPリリースを追跡することも可能です。

状態とイベント

ライフサイクル状態とイベントの流れ(Jetpack lifecycleと同じ):

Lifecycle diagram

ライフサイクルの実装

Composablesは通常、独自のライフサイクルを必要としません。共通のLifecycleOwnerが、相互接続されたすべてのエンティティにライフサイクルを提供します。デフォルトでは、Compose Multiplatformによって作成されたすべてのComposableは同じライフサイクルを共有し、そのイベントを購読したり、ライフサイクル状態を参照したりできます。

LifecycleOwnerオブジェクトはCompositionLocalとして提供されます。 特定のComposableサブツリーのライフサイクルを個別に管理したい場合は、独自のLifecycleOwner実装を作成できます

マルチプラットフォームのライフサイクルでコルーチンを扱う際、Lifecycle.coroutineScopeの値はDispatchers.Main.immediateの値に紐付けられており、これはデフォルトではデスクトップターゲットで利用できない場合があることを覚えておいてください。ライフサイクル内のコルーチンとフローがCompose Multiplatformで正しく機能するようにするには、プロジェクトにkotlinx-coroutines-swingの依存関係を追加してください。詳細については、Dispatchers.Mainのドキュメントを参照してください。

Androidライフサイクルと他のプラットフォームのマッピング

iOS

ネイティブイベントと通知ライフサイクルイベントライフサイクル状態の変化
viewDidDisappearON_STOPSTARTEDCREATED
viewWillAppearON_STARTCREATEDSTARTED
willResignActiveON_PAUSERESUMEDSTARTED
didBecomeActiveON_RESUMESTARTEDRESUMED
didEnterBackgroundON_STOPSTARTEDCREATED
willEnterForegroundON_STARTCREATEDSTARTED
viewControllerDidLeaveWindowHierarchyON_DESTROYCREATEDDESTROYED

Web

Wasmターゲットの制限により、ライフサイクルは以下のようになります。

  • アプリケーションは常にページにアタッチされているため、CREATED状態をスキップします。
  • ウェブページは通常、ユーザーがタブを閉じたときにのみ終了するため、DESTROYED状態には決して到達しません。
ネイティブイベントライフサイクルイベントライフサイクル状態の変化
blurON_PAUSERESUMEDSTARTED
focusON_RESUMESTARTEDRESUMED

デスクトップ

Swingリスナーコールバックライフサイクルイベントライフサイクル状態の変化
windowIconifiedON_STOPSTARTEDCREATED
windowDeiconifiedON_STARTCREATEDSTARTED
windowLostFocusON_PAUSERESUMEDSTARTED
windowGainedFocusON_RESUMESTARTEDRESUMED
disposeON_DESTROYCREATEDDESTROYED