android倒计时

本文探讨了在Android中实现倒计时的三种方法:Handler、Timer和CountDownTimer。Handler在CPU休眠时可能导致定时任务失效,而CountDownTimer在特定设置下可能出现计数不准确的问题。此外,还提到了在倒计时需求中如何确保锁屏状态下仍能正常运行。
摘要由CSDN通过智能技术生成

Handler


通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,但此时并没有运行,它需要CPU时间片。一旦得到CPU时间片,就会执行run()方法。run()的方法体称为线程体,它包含了要执行的这个线程的内容,run()方法运行结束,此线程也随即终止。
经过测试,这种倒计时方式锁屏之后20s左右就会失效(timer不会失效)
mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
 
        mHandler.postDelayed(this, 1000);
    }
}, 1000);



Timer

    一个Timer内部封装装了“一个Thread”和“一个TimerTask队列”,这个队列按照一定的方式将任务排队处理。封装的Thread在Timer的构造方法调用时被启动,这个Thread的run方法按照条件去循环这个TimerTask队列,然后调用TimerTask的run方法。 但是,如果CPU进入了休眠状态,那么这个thread将会因为失去CPU时间片而阻塞,从而造成我们需要的定时任务失效。

样例:自定义一个button,点击之后开启倒计时,并在button上显示剩余时间,同时要确保锁屏之后继续正常倒计时(handler锁屏会失效)。

创建一个TimeButton集成Button

public class TimeButton extends Button{
 

初始化定时器

private void initTimer(){
        timer = new Timer();
        task = new TimerTask() {
            @Override
            public void run() {
 
                mHandler.sendEmptyMessage(777);
            }
        };
    }

启动定时器

public void start(){
    initTimer();
    timer.schedule(task , 0 , 1000);//延迟0s,每隔1s执行一次run方法
    this.setText(cycle + "");
}
定期刷新Button的text


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值