利用Handler的postDelayed()实现定时任务

243 阅读1分钟

1、首先创建一个Handler对象

var handler = Handler()

2、然后创建一个Runnable对象

    var runnable = Runnable(){
       override fun run() {
            // TODO Auto-generated method stub
            //要做的事情,这里再次调用此Runnable对象,以实现每两秒实现一次的定时器操作
            handler.postDelayed(this, 2000)
       }
    }

3、使用PostDelayed方法,两秒后调用此Runnable对象 实际上也就实现了一个2s的一个定时器

    handler.postDelayed(runnable, 2000)

4、如果想要关闭此定时器,可以这样操作

    handler.removeCallbacks(runnable)

Handler 定时器 正确使用方法:

    //初始化
        private var handler: Handler? = Handler()
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
     
            val runnable = Runnable {
                // 这个是循环 间隔3s弹一次Toast
                handler?.postDelayed(this, 3 * 1000)
                Toast.makeText(context, "延时5s", Toast.LENGTH_SHORT).show()
            }
            // 延迟2s弹Toasat
            handler?.postDelayed(runnable, 2000)
        }
     
        override fun onDestroy() {
            super.onDestroy()
            //在页面结束时 清空队列消息
            handler?.removeCallbacksAndMessages(null)
            handler = null
        }