タイマーを Android で作りたいことがあり、その際 Jetpack Compose で定期ループみたいなもの実装しました。
Kotlin で実装を行うには Timer や Runnable を用いることが多いそうですが、Jetpack compose では以下のようにLaunchedEffect
と delay
を用いて簡単に実装できます。
// 監視対象とする変数 var deadLine by remember { mutableStateOf(20000) } var cTime by remember { mutableStateOf(10000) } LaunchedEffect(key1 = deadLine, key2 = cTime) { if (cTime > 0) { // delay で指定秒数(ミリ秒)だけ間隔を開ける delay(100) // 時間の更新処理 cTime -= 100 // (必要なら)update 処理 } }
key1, key2
に指定したキーを監視し、値が変更されるとLaunchedEffect
の中身が実行されます。(key
は1つでも構いません。)
LaunchedEffect
の中身で監視対象であるcTime
の更新をおこなっているので、ブロック終了後に再度LaunchedEffect
が呼ばれます。
これが上記コードがタイマー処理として働く理由となります。
おわりに
今回自分も初めて使ってみましたが、思ったより簡単にかけました。 今後も機会があれば使っていきたいと思います。