如何在Android Studio(kotlin)中创建定时器?

0 人关注

我想在Android Studio中使用kotlin创建一个程序,其中我使用计时器,每隔约20毫秒做一个动作,并无限期地运行。我使用了类似这样的东西。

object : CountDownTimer(10000,20){
   override fun onTick(millisUntilFinished: Long) {
   override fun onFinish() {
      start()
}.start()

但问题是,一段时间后,计时器开始变慢,当1秒应该过去时,实际上是6秒。把动作改为40毫秒或更多,只在一段时间内有帮助,因为后来还是会变慢。我看到有人使用的定时器实际上是这样工作的,没有任何问题,但它是在Java中,当我试图用Android Studio的帮助把它改成Kotlin时(我从来没有使用过Java),它最终没有工作(启动后,应用程序每次都崩溃)。有没有人知道,除了我上面展示的CountDownTimer之外,如何创建或使用不同的定时器?

我忘记添加对我有用的代码了。这基本上是我接受的答案,但我不得不做一些修改以使其工作,所以它在这里。

val timerName = lifecycleScope.launch(Dispatchers.IO) {
   while (isActive) {
      lifecycleScope.launch {
        doSomething()
   delay(20L)
    
3 个评论
你为什么要这样做?
@cutiko 我想做一个游戏,每一次特定的时间都会加分。
如果你用Kotlin编写,你可以直接 launch 一个coroutine,它只是在一个循环中延迟20ms。
android
android-studio
kotlin
timer
Szomti
Szomti
发布于 2021-08-31
1 个回答
buszi
buszi
发布于 2021-08-31
已采纳
0 人赞同

这很可能是因为 onTick() onFinish() 中的函数是在计数器工作的同一个程序中调用的,所以你可能需要 launch 中的另一个程序来避免阻塞定时器范围。

另外,这个【替换代码3API目前是实验性的,所以我想不太建议使用它,也许你可以这样做。

val timerJob = scope.launch(Dispatcher.IO) {
   while (isActive) {
       scope.launch { doSomething() }
       delay(20L)