首页 > 解决方案 > Kotlin Timer() 可能是错误的实现

问题描述

我正在学习 Kotlin,同时我尝试编写一个简单的应用程序。实际上,我有一个问题,Timer()因为当我switch1第二次启用应用程序崩溃并写入时:

Timer is already cancelled.

我需要在switch1关闭时停止计时器,当switch1再次启用时,计时器应该从头开始计数。可能,我必须以另一种方式实现它,但我不知道该怎么做。

请帮助并为我的英语感到抱歉。

import android.graphics.Color
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)

         val timer = Timer()

         switch1.setOnCheckedChangeListener { switch1, isChecked ->
             if (isChecked) {
                 root_layout.setBackgroundColor(Color.GREEN)

                 timer.schedule(object : TimerTask() {
                     override fun run() {
                         println("dfvffv")
                     } }, 2000, 2000)
             } else {
                 root_layout.setBackgroundColor(Color.LTGRAY)

                 timer.cancel()
             }
         }
     }
 }

标签: androidkotlin

解决方案


timer每次用户点击开关时尝试初始化:

var timer: Timer? = null

switch1.setOnCheckedChangeListener { switch1, isChecked ->
   
    if (isChecked) {
        timer = Timer()
        root_layout.setBackgroundColor(Color.GREEN)

        timer.schedule(object : TimerTask() {
            override fun run() {
                println("dfvffv")
            } }, 2000, 2000)
    } else {
        root_layout.setBackgroundColor(Color.LTGRAY)

        timer?.cancel()

    }
}

通过cancel()方法描述:

一旦定时器被终止,它的执行线程就会优雅地终止,并且不能在其上安排更多的任务。

因此,您需要创建一个新实例Timer来安排新任务。


推荐阅读