您当前的位置: 首页 >  android

韩曙亮

暂无认证

  • 1浏览

    0关注

    1068博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

韩曙亮 发布时间:2020-07-21 22:17:20 ,浏览量:1

文章目录
  • 一、Timer 定时器基本使用
  • 二、Timer 定时器常用用法
  • 三、Timer 源码分析
  • 四、Timer 部分源码注释
  • 五、源码及资源下载

参考文档 :

  • Timer 定时器 API 文档
  • TimerTask 定时器任务 API 文档
一、Timer 定时器基本使用

Timer 可用于执行延迟任务或循环任务 ; 下面是定时器最基本用法 ;

1 . Timer 定时器基本使用 :

  • 创建 Timer 定时器 : 调用构造函数创建定时器 Timer timer = new Timer() ;
  • 分配 TimerTask 定时器任务 : 调用定时器的 schedule 方法 , 为 Timer 定时器分配 TimerTask 定时器任务 ;
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // ...
            }
        }, 1_000);

2 . 定时器任务执行规则 : Timer 执行任务是 串行执行 的 , 同一时间只能执行一个任务 ;

在下面的示例中

  • 任务 1 在 1 秒之后执行 , 在第 6 秒执行完毕 ;
  • 任务 2 在第 6 秒 , 任务 1 执行完毕后 , 才开始执行 , 在第 11 秒执行完毕 ;

3 . 代码示例 :

    private void timer(){
        // Timer 可用于执行延迟任务或循环任务
        Timer timer = new Timer();

        /*
            如果提交多个 TimerTask 定时器任务
            需要等待之前的 定时器任务 执行完成 , 才能执行后面的任务

            TimerTask 实现了 Runnable 接口

            延迟 1 秒执行任务 1 ( 任务 1 时长 5 秒 )
            延迟 2 秒执行任务 2 ( 任务 2 时长 5 秒 )

            Timer 执行任务是串行执行的 , 同一时间只能执行一个任务
            任务 1 在 1 秒之后执行 , 在第 6 秒执行完毕
            任务 2 在第 6 秒 , 任务 1 执行完毕后 , 才开始执行 , 在第 11 秒执行完毕
         */

        // 延迟 1 秒执行任务 1
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Log.i(TAG, "延迟 1 秒执行 5 秒的任务 1 开始执行");
                try {
                    Thread.sleep(5_000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.i(TAG, "延迟 1 秒执行 5 秒的任务 1 执行完毕");
            }
        }, 1_000);

        // 延迟 2 秒执行任务 2
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Log.i(TAG, "延迟 2 秒执行 5 秒的任务 2 开始执行");
                try {
                    Thread.sleep(5_000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.i(TAG, "延迟 2 秒执行 5 秒的任务 2执行完毕");
            }
        }, 2_000);
    }
二、Timer 定时器常用用法

1 . Timer 定时器构造函数 :

① 创建默认定时器 : 默认以 “Timer-序列号” 作为定时器线程名称 ;

public Timer() { this("Timer-" + serialNumber()); }

② 创建守护线程定时器 : 指定定时器是否作为守护线程来执行 , 定时器线程名称是默认名称 ;

public Timer(boolean isDaemon) { this("Timer-" + serialNumber(), isDaemon); }

③ 创建定时器并指定定时器名称 : 创建定时器 , 并 设置定时器线程名称 ;

    public Timer(String name) {
        thread.setName(name);
        thread.start();
    }

④ 指定名称并设置守护线程 : 同时 设置定时器名称 , 并 设置定时器是否是守护线程 ;

    public Timer(String name, boolean isDaemon) {
        thread.setName(name);
        thread.setDaemon(isDaemon);
        thread.start();
    }

2 . 定时器调度方法 :

① 在指定一段时间后执行定时器任务 : 在 delay 毫秒后 , 执行 TimerTask 定时器任务 ;

    public void schedule(TimerTask task, long delay) {
        if (delay             
关注
打赏
1663594092
查看更多评论
0.0418s