一起Talk Android吧(第二百九十九回:Java中的Timer)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第二百九十九回:Java中的Timer)相关的知识,希望对你有一定的参考价值。

 

看官们,我们在上一章回中介绍了android中BLE开发的例子,本章回中我们将介绍Java中的Timer,闲话休提,言归正转。让我们一起Talk Android吧!


看官们,我在项目中需要使用Timer,因此对Timer的使用方法做一些介绍。Timer是Java提供的类,经常用来实现某个时间后执行某个任务。它需要配合TimerTask类来完成定时操作。

它的使用步骤如下:

  • 1.定义TimerTask的子类并且实现Run方法,该方法中的内容就是具体执行的任务;
  • 2.创建Timer和Timer Task子类对象;
  • 3.使用Timer的schedule()方法来启动定时器;
  • 4.任务完成后使用Timer的cancel()方法取消定时器.

接下来我们重点介绍一下schedule()方法,该方法是重载方法,有1-3个参数,下面是官方文档中的截图:

  • 第一个参数是TimerTask类对象用来表示具体执行的任务;
  • 第二个参数是任务被延时或者指定的具体时间,用delay表示非常准确;
  • 第三个参数是任务被执行的间隔时间,通俗点讲就是每隔一段时间执行一次任务,用period表示非常准确。
  • schedule()方法种类比较多,大家可以依据程序的需要使用不同种类的重载方法来实现定时功能。


Timer使用起来比较简单,不过也有一些注意事项:

  • 1.定时器使用完后需要取消;
  • 2.Timer和TimerTask都可以被取消,但是取消后就能再次使用了,如果想再启动定时器需要new新的Timer和TimerTask对象才可以,不然程序会报异常。

这点我在代码中做了演示,请大家参考下面的代码:

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

public class TimerEx {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建一个时间对象
        Calendar calendar = Calendar.getInstance();
//      System.out.println(calendar.getTime());
        calendar.set(2021,7,8,9,40);
//      System.out.println(calendar.getTime());
        
        Timer mTimer = new Timer();
        TimerAction mTimerAction = new TimerAction();

        //指定时间开始运行任务
//      mTimer.schedule(mTimerAction,calendar.getTime());
        //延迟100ms运行任务,延迟到时后每隔200ms运行任务
        mTimer.schedule(mTimerAction, 100,200);

        //让主程序暂停一段时间方便观察Timer运行过程
        try {
            System.out.println("waiting for 2 minutes");
//          Thread.sleep(120000);
            Thread.sleep(2000);
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        
        //取消timer。
        mTimer.cancel();
        mTimer = null;
        mTimerAction = null;
        System.out.println("cancel timer");
        
        //Timer取消后不能再次运行,需要重新new一个出来
        if(mTimer == null) {
            mTimer = new Timer();
            mTimerAction = new TimerAction();
            System.out.println("timer running again");
            mTimer.schedule(mTimerAction, 100,200);
        }
        
        try {
            System.out.println("waiting for 2 minutes");
//          Thread.sleep(120000);
            Thread.sleep(2000);
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        mTimer.cancel();
        mTimer = null;
        mTimerAction = null;
    }
}

class TimerAction extends TimerTask {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("Action running");
    }
}


代码中有些注释是为了演示不同的Timer功能,大家可以自己动手去修改,然后编译运行程序,我在这里就不运行了。


各位看官,关于Java中Timer的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第二百九十九回:Java中的Timer)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百九十九回:自定义View实例五:简约工具栏)

一起Talk Android吧(第二百九十回:Android中的BLE开发:获取服务一)

一起Talk Android吧(第二百九十七回:Android中的BLE开发:断开设备连接)

一起Talk Android吧(第二百九十八回:Android中的BLE开发:大结局)

一起Talk Android吧(第二百九十一回:Android中的BLE开发:获取服务二)

一起Talk Android吧(第二百九十三回:Android中的BLE开发:注册特征值通知二)