Android Timer和TimerTask

1.概览

Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。

最简单常用的用法实例:

    private Timer mTimer = new Timer();
    private TimerTask mTimerTask;
    private int SECOND = 1;

    @Override
    public void onCreate() {
        super.onCreate( );

        mTimerTask = new TimerTask( ) {
            @Override
            public void run() {
               sync(); //要做的事情的一个方法
            }
        };
        mTimer.schedule( mTimerTask, 1000, SECOND * 1000 );
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy( );
        mTimer.cancel();
    }

 2.Timer类的方法

  • schedule(TimerTask task,  long delay,  long period)
  • schedule(TimerTask task,  Date time,  long period)
  • scheduleAtFixedRate(TimerTask task,  long delay,  long period)
  • scheduleAtFixedRate(TimerTask task,  Date firstTime,  long period)

    第一个参数是一个TimerTask,第二个参数是延长执行时间或者开始执行日期,第三个参数是执行时间间隔。

3.步分析schedule和scheduleAtFixedRate

(1)2个参数的schedule在制定任务计划时, 如果指定的计划执行时间 scheduledExecutionTime<=systemCurrentTime,则task会被立即执行。 scheduledExecutionTime不会因为某一个task的过度执行而改变。
(2)3 个参数的schedule在制定反复执行一个task的计划时,每一次执行这个task的计划执行时间随着前一次的实际执行时间而变,也就是 scheduledExecutionTime(第n+1次)=realExecutionTime(第n次)+periodTime。也就是说如果第n 次执行task时,由于某种原因这次执行时间过长,执行完后的 systemCurrentTime>=scheduledExecutionTime(第n+1次),则此时不做时隔等待,立即执行第n+1次 task,而接下来的第n+2次task的scheduledExecutionTime(第n+2次)就随着变成了 realExecutionTime(第n+1次)+periodTime。说白了,这个方法更注重保持间隔时间的稳定。
(3)3个参数的scheduleAtFixedRate 在制定反复执行一个task的计划时,每一次执行这个task的计划执行时间在最初就被定下来了,也就是 scheduledExecutionTime(第n次)=firstExecuteTime+n*periodTime;如果第n次执行task时,由 于某种原因这次执行时间过长,执行完后的systemCurrentTime>=scheduledExecutionTime(第n+1次),则 此时不做period间隔等待,立即执行第n+1次task,而接下来的第n+2次的task的scheduledExecutionTime(第n+2 次)依然还是firstExecuteTime+(n+2)*periodTime这在第一次执行task就定下来了。说白了,这个方法更注重保持执行频率的稳定。

 

4.一些注意的问题

  • 每一个Timer仅对应唯一一个线程。
  • Timer不保证任务执行的十分精确。
  • Timer类的线程安全的。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值