Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin Timer()可能是错误的实现_Android_Kotlin - Fatal编程技术网

Android Kotlin Timer()可能是错误的实现

Android Kotlin Timer()可能是错误的实现,android,kotlin,Android,Kotlin,我正在学习Kotlin,同时尝试编写一个简单的应用程序。 实际上,我对Timer()有一个问题,因为当我启用switch1时,第二次应用程序崩溃并写入: Timer is already cancelled. 当开关1关闭时,我需要停止计时器,当开关1再次启用时,计时器应从开始开始计数。也许,我必须以另一种方式实现它,但我不知道如何实现它 请帮助我,对不起我的英语 import android.graphics.Color import android.os.Bundle import and

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

Timer is already cancelled.
开关1
关闭时,我需要停止计时器,当
开关1
再次启用时,计时器应从开始开始计数。也许,我必须以另一种方式实现它,但我不知道如何实现它

请帮助我,对不起我的英语

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()
             }
         }
     }
 }

每次用户单击开关时,尝试初始化计时器:

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
实例来安排新任务