android - 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()
}
}
}
}
解决方案
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
来安排新任务。
推荐阅读
- postgresql - 检查范围是否包含在 PQexecPrepared 中损坏的值(在 psql 中工作)
- javascript - 将数组映射到 JSX 组件数组,但仅在 prop 发生更改时更新数组中的正确索引
- javascript - 如何将输入值支持到 API 调用的参数中
- database - 重新运行请求时出现问题 - JMeter
- jenkins - Jenkins [Groovy] Annotation Grab 不能在沙箱中使用
- google-chrome - cookie 和网络信标有什么区别?
- r - 如何在 r 中为 ggplot 自定义调色板?
- python - TypeError: 不支持的操作数类型 -: 'Position' 和 'Position'
- python - 我在渲染表单时遇到问题 Django 物化 css 表单我从 django-materializecss-form 的 field.html 中获取的变量不存在
- rust - 如何在 Rust 中将字节迭代器转换为流