Open5
公式ドキュメントを雑に読んでみる
目次
- ライフサイクル
- Composeにおける副作用
- アーキテクチャについて
コンポーザブルのライフサイクル
- State<T>にオブジェクト変更をトリガーに再コンポジションされる
入力が変化していない場合には、再コンポーズが発生しない時がある
-
@Composable
関数がUnit
以外の戻り値の型がある - 関数に
@NonRestartableComposable
または@NonSkippableComposable
のアノテーションが付いている。 - 必須パラメータの型が不安定な時
基本時に再コンポーズされるタイミングは、安定な値が、何らかの方法で、変更されたときに処理が実行されます。このときの、安定な値とは、
- すべてがプリミティブな型
- 文字列型
- すべての関数型(ラムダ)
- 安定しているが可変である型
MutableState
型のState
の.value
に変更が通知される
@Composable
関数の引数全ての型が安定していて、前回の呼び出し行こうと、すべての値が変更がない場合のみ、再描画がスキップする
安定しているものとして扱うには、@Stable
アノテーションをつける
@Stable
interface UiState<T : Result<T>> {
val value: T?
val exception: Throwable?
val hasError: Boolean
get() = exception != null
}
Composeにおける副作用
作用とは、UIを出力せずに、コンポジションの完了時に副作用の実行を引き起こすコンポーズ可能な関数。
副作用とは、@Composable
関数の範囲外で発生するアプリの状態の変化のこと
副作用が、がないようにするのが理想的である。
-
LaunchedEffect
:@Composable
のスコープ内でsuspend
関数を実行する -
rememberCoroutineScope
: Composable外部からコルーチンを起動できる- 初回の描画(入場)時に、
CoroutineScope
が作成され、Composableが破棄されるタイミングに合わせてCoroutineScope
も破棄される - 下記参考
- 初回の描画(入場)時に、
-
rememberUpdatedState
: 値が変化しても再起動すべきではない作用の値を参照します。
Jetpack Composeのフェーズ
複数のフェーズを介して、フレームをレンダリングする
-
Android View
- 測定
- Layout
- Drawing
-
Compose
- Composition
- Layout
- Drawing
Composeについてそれぞれのフェーズ
-
Composition
では、UIを表すツリー構造を作る -
Layout
では、- Nodeの子を測定する
- 独自のサイズを決定する
- 子ノードを配置する
Layout終了時には、width,height、座標のx,yが割当られる
アーキテクチャについて