美文网首页kotlin
kotlin定时器(1)timer.schedule

kotlin定时器(1)timer.schedule

作者: 金之心 | 来源:发表于2020-09-24 21:09 被阅读0次

在kotlin中,执行定时任务借助于java.util下的TimerTask,Date和Timer三个类实现,最终执行语句格式为

Timer().schedule(task, time, period)

看起来很简单,timer.schedule()是一个函数,task是一个TimerTask类,表示要执行的任务,time是是一个Date类,表示第一次执行的时间,period是一个长整数,表示周期(单位为毫秒)。(kotlin里面时间单位基本上用的是毫秒,而在python里面我更多的用的是秒,刚开始确实有点不习惯,好了不说废话了)。

首先先看看TimerTask类如何构造。在kotlin里面这是个抽象类,无法直接实例化。所以接下来要构造一个继承该类的子类,重写run方法就够了,再实例化一个就够了

class MyTimerTask() : TimerTask() {
    override fun run() {
        //这里填上每次触发要执行的代码
    }
}
val task = MyTimeTask()

有的时候你需要传入一些参数作为属性以供重用,比如

class MyTimerTask(val str:String) : TimerTask() {
    override fun run() {
        println(str)
    }
}
val task = MyTimerTask("Hello World!")

这样就能每次调用时打印传入的字符串参数str

接下来看看Date类如何构造,这个也很简单

val date = date(2020,1,1,0,0,0)

六个参数分别为年月日时分秒,如果只填3,4或5个参数,调用的函数仍然按这个顺序赋值,只不过缺的那些默认为零。如果一个参数也不填的话,就是获取当前时间

当然还有字符串解析解析等方式构造出来Date,用起来也更加方便,不过等以后再讲。

合并以上内容,形成以下示例

import java.util.*
class MyTimerTask(val str:String) : TimerTask() {
    override fun run() {
        println(str)
    }
}
fun main(){
    val task = MyTimerTask("Hello World!")
    Timer().schedule(task, Date(), 1000)
}

这样控制台就会一秒输出一行Hello World!。

当然如果只是单次使用也可以用匿名内部类

import java.util.*
fun main(){
    Timer().schedule(object:TimerTask(){
        override fun run() {
            println("Hello World!")
        }
    }, Date(), 1000)
}

不过可以发现仅仅靠这些在某些场合还是不够人性化,比如闹钟,人们肯定是想自己设好时分秒就行了,还要自己写入年月日,这就太不人性了,这些问题留着下次解决。

另外提一点,如果开始时间设的早于程序开始时间,程序启动时,它会把原来遗漏的补上,而后面的依然按照设定值为参考。

本人编程尚属新手,如有错误,欢迎指正。(不过这么短的程序这么简单的功能,,我为什么说这么一大段)

相关文章

网友评论

    本文标题:kotlin定时器(1)timer.schedule

    本文链接:https://www.haomeiwen.com/subject/kvvtuktx.html