Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Jetpack Compose でタイマー処理を実装する

タイマーを Android で作りたいことがあり、その際 Jetpack Compose で定期ループみたいなもの実装しました。

Kotlin で実装を行うには Timer や Runnable を用いることが多いそうですが、Jetpack compose では以下のようにLaunchedEffectdelay を用いて簡単に実装できます

// 監視対象とする変数
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が呼ばれます

これが上記コードがタイマー処理として働く理由となります。

おわりに

今回自分も初めて使ってみましたが、思ったより簡単にかけました。 今後も機会があれば使っていきたいと思います。