ライフサイクル
Compose Multiplatformにおけるコンポーネントのライフサイクルは、Jetpack Composeのライフサイクルコンセプトから採用されています。ライフサイクルに対応したコンポーネントは、他のコンポーネントのライフサイクル状態の変化に反応でき、より整理され、多くの場合より軽量で、メンテナンスしやすいコードを作成するのに役立ちます。
Compose Multiplatformは共通のLifecycleOwner
実装を提供します。これは、元のJetpack Composeの機能を他のプラットフォームに拡張し、共通コードでライフサイクル状態を監視するのに役立ちます。
マルチプラットフォームのLifecycle
実装を使用するには、commonMain
ソースセットに以下の依存関係を追加してください。
kotlin {
// ...
sourceSets {
// ...
commonMain.dependencies {
// ...
implementation("org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.2")
}
// ...
}
}
マルチプラットフォームのLifecycle実装の変更は、当社の最新情報で追跡できます。または、Compose Multiplatform changelogで特定のEAPリリースを追跡することも可能です。
状態とイベント
ライフサイクル状態とイベントの流れ(Jetpack lifecycleと同じ):
ライフサイクルの実装
Composablesは通常、独自のライフサイクルを必要としません。共通のLifecycleOwner
が、相互接続されたすべてのエンティティにライフサイクルを提供します。デフォルトでは、Compose Multiplatformによって作成されたすべてのComposableは同じライフサイクルを共有し、そのイベントを購読したり、ライフサイクル状態を参照したりできます。
LifecycleOwner
オブジェクトはCompositionLocalとして提供されます。 特定のComposableサブツリーのライフサイクルを個別に管理したい場合は、独自のLifecycleOwner
実装を作成できます。
マルチプラットフォームのライフサイクルでコルーチンを扱う際、Lifecycle.coroutineScope
の値はDispatchers.Main.immediate
の値に紐付けられており、これはデフォルトではデスクトップターゲットで利用できない場合があることを覚えておいてください。ライフサイクル内のコルーチンとフローがCompose Multiplatformで正しく機能するようにするには、プロジェクトにkotlinx-coroutines-swing
の依存関係を追加してください。詳細については、Dispatchers.Main
のドキュメントを参照してください。
- ナビゲーションとルーティングで、ナビゲーションコンポーネントにおけるライフサイクルの動作について学びます。
- 共通ViewModelページで、マルチプラットフォームViewModelの実装について詳しく学びます。
Androidライフサイクルと他のプラットフォームのマッピング
iOS
ネイティブイベントと通知 | ライフサイクルイベント | ライフサイクル状態の変化 |
---|---|---|
viewDidDisappear | ON_STOP | STARTED → CREATED |
viewWillAppear | ON_START | CREATED → STARTED |
willResignActive | ON_PAUSE | RESUMED → STARTED |
didBecomeActive | ON_RESUME | STARTED → RESUMED |
didEnterBackground | ON_STOP | STARTED → CREATED |
willEnterForeground | ON_START | CREATED → STARTED |
viewControllerDidLeaveWindowHierarchy | ON_DESTROY | CREATED → DESTROYED |
Web
Wasmターゲットの制限により、ライフサイクルは以下のようになります。
- アプリケーションは常にページにアタッチされているため、
CREATED
状態をスキップします。 - ウェブページは通常、ユーザーがタブを閉じたときにのみ終了するため、
DESTROYED
状態には決して到達しません。
ネイティブイベント | ライフサイクルイベント | ライフサイクル状態の変化 |
---|---|---|
blur | ON_PAUSE | RESUMED → STARTED |
focus | ON_RESUME | STARTED → RESUMED |
デスクトップ
Swingリスナーコールバック | ライフサイクルイベント | ライフサイクル状態の変化 |
---|---|---|
windowIconified | ON_STOP | STARTED → CREATED |
windowDeiconified | ON_START | CREATED → STARTED |
windowLostFocus | ON_PAUSE | RESUMED → STARTED |
windowGainedFocus | ON_RESUME | STARTED → RESUMED |
dispose | ON_DESTROY | CREATED → DESTROYED |