リッチUIについて色々な事例紹介
speakerdeck.com
文字列や画像のグラデーションや背景追加や矩形追加等
かなりのパターンのアニメーションについても紹介されている
音量制御についてのセッション
docs.google.com
音量制御はあまり触れてこなかったので参考になった
音量設定は端末差異があるので数値で指定すると意図しないものになる可能性がある
SoundPool, MediaPlayer, AudioTrackを使い分ける
パフォーマンス監視ツールとJetpackComposeの導入
speakerdeck.com
パフォーマンス指標を図ることでJetpackComposeの導入のメリットを明確にすることにより採択されるようにしていった
各監視ツールの特徴がまとめられている
Jetpack ComposeでAndroid/iOSアプリを作る
AndroidとiOS向けアプリを両方作る
UIはComposeで作ってビジネスロジック部分はKolin Multiplatformで作る話
Compose for iOSはα版なのでまだまだ実用には遠そう
Jetpack ComposeのSide-Effectを使いこなす
LaunchedEffect
LaunchedEffect(key)の形なのでkeyが変わったら動く(初回は必ず実行される)
内部はCoroutineで動いてるらしい
keyにUnitとか固定値を入れると最初の1回だけ動くようにできる
keyを複数指定も可能で指定したどれか1つが変わったら動く
LaunchedEffectのCoroutines
キャンセルするタイミングは
・keyが変わってLaunchedEffectが再起動するとき
・CompositionからLeaveするとき
rememberCoroutineScope
val scope = rememberCoroutineScope()
ボタンとかのイベント処理で使いそう
キャンセルのタイミングはCompositionからLeaveするとき
DisposableEffect
最後に何か処理をしたい場合によく使う
これはLaunchedEffectと違ってCoroutineでは起動してない
例ではライフサイクルの監視処理を起動させて最後に破棄する例だった
初回起動時はonDisposeが実行されず、次回起動時に前回の値でonDispose起動→それ以外の処理が今回の値で起動する
rememberUpdatedState
ComposeのStateを返す
内部としてはrecompositionのたびにvalueを書き換えてる
どういうときに必要か
- Composeの外で変化する状態を参照している
- LauchedEffect, DisposableEffectのkeyではない状態を参照
- 時間が経過して使用される状態への参照
- コールバック関数
SideEffect
Compositionが成功したときに実行される
Composable内でエラーが起きた場合には実行されないので正常時だけ動くような制御ができる
ログの抑止にも使えるかも
derivedStateOf
val listState = rememberLazyListState() // スクロールの度に状態が変わる LazyColumn(state = listState) { /* */ } val showButton = listState.firstVisibleItemIndex > 0 // スクロールの度にrecompositionされてしまう if (showButton) { Button() { Text("ScrollTop") } }
本来はshowButtonが変わった時だけ動かしたい
val showButton by remember { derivedStateOf { listState.firstVisibleItemIndex > 0 } }
こうするとshowButtonが変わった時だけrecompositionされる
LazyList系が一番使われそう
produceState
Composeの外の処理をComposeに変換してくれる
snapshotState
ComposeのStateをComposeの外でFLowとして監視したい
ログ出力にTimber使ってるので調べてみる