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