kotlin定时器(1)timer.schedule

在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)