0

我想写一些应用程序,我希望某些事情按计划发生。

每隔几分钟轮询一次 URL 以获取更新似乎是一个相当常见的用例。不过,在这种特殊情况下,我只是想实现一个时钟。

这有效:

@Composable
fun App() {
    var ticks by remember { mutableStateOf(0) }

    // Not 100% happy about this unused variable either
    val timer = remember {
        Timer().apply {
            val task = object : TimerTask() {
                override fun run() {
                    ticks++
                }
            }
            scheduleAtFixedRate(task, 1000L, 1000L)
        }
    }

    MaterialTheme {
        Text(
            // A real application would format this number properly,
            // but that's a different question
            text = "$ticks"
        )
    }
}

但是我必须 import java.util.Timer,所以它不会是便携式的。

Jetpack Compose 可以做动画,所以它肯定在某个地方有自己的计时器,这意味着应该有一些可移植的方式来做到这一点,但我似乎无法弄清楚。

有没有一种跨平台的方式来为此目的获取计时器?

4

1 回答 1

1

在 Compose 中,您可以使用LaunchedEffect- 它是在协程范围内运行的副作用,因此您可以delay在内部使用,如下所示:

var ticks by remember { mutableStateOf(0) }
LaunchedEffect(Unit) {
    while(true) {
        delay(1.seconds)
        ticks++
    }
}
于 2022-02-20T04:42:14.867 回答