android全局计时_讲讲 Android 中倒计时功能实现的几种方式

在 Android 应用中,倒计时功能基本上在每个 App 当中好像都能用到,如 Splash 界面、短信验证码倒计时、商品促销活动倒计时等等,作为程序员都得去编写代码实现这样一个功能,如何优雅地去实现这个功能,并且用户体验也还不错呢?

Android 中实现倒计时的几种方式

01Handler 实现

Handler 实现倒计时功能大多采用 Handler postDelayed(延迟执行)方法实现,这种方法实现起来简单便捷,被大多 Android 开发者采用。

通过查看源码学习 postDelayed 方法,当调用 postDelayed 方法时,需要传入两个参数,Runnable 和一个 long 类型的数值。

Runnable 接口是线程辅助类,仅定义了一个方法run()方法。

long 类型的 delayMillis 参数是指需要传入延时毫秒数,注意这里的单位是毫秒,1秒等于 1000 毫秒,如果需要延时1 秒执行,则传入 1000 即可。

具体实现如下

这里定义了一个全局 Handler ,全局的时间 timeNum 用于计时,当调用 postDelayed 方法成功后,每隔一秒钟就会执行一次 run 方法,执行run 方法后就减掉 1 秒钟,最后 timeNum 减到为 0 时表示计时时间到。

02Timer 实现

Timer在 Android中实现倒计时功能也是比较常见的一种方式,大多是通过 Timer 的 schedule 函数实现倒计时功能。

从源码中可以看出,schedule 函数需要传入三个参数,且三个参数必传。

TimerTask 是一个实现了 Runnable 接口的抽象类,代表一个可以被 Timer 执行的任务。

long delay 任务执行之前的延迟时间。

long period 连续执行任务的间隔时间。

注意:这里的时间单位都是以毫秒作为计算。

那具体怎么实现呢?

首先,这里还是需要创建一个全局 Handler

timeNum 倒计时总的时间

新增一个变量 isEnd ,用于记录倒计时是否结束。

timer 的初始化

这里,每隔一秒钟就会执行一次 run 方法,在 run 方法中,判断当前计时是否结束,没有结束,将会向 TimerHandler 发送一次消息,执行一次倒计时减 1 秒的操作。

03CountDownTimer 实现

讲了以上两种倒计时实现的方法,我觉得还是不能满足我的需求,写出来实现倒计时功能的代码不是我理想中的。

下面就来讲讲 Android SDK 提供的 CountDownTimer 如何实现倒计时功能。

CountDownTimer 封装好了倒计时总时间、间隔时间、计时完成、计时启动、计时取消等函数,使用起来只需要初始化 CountDownTimer 类后,监听计时进度或调用相关函数即可完成倒计时功能。相比以上两种写法,通过拼装、自写计时逻辑的方式跟官方封装完成的 CountDownTimer 实现倒计时功能相比要更复杂一些,在稳定性方面可能也不如 CountDownTimer 。

在查看 CountDownTimer 源码时发现有一处简单介绍 CountDownTimer 的实现过程

没错,在具体使用中就是这么简单

传入的两个参数分别是总的计时时间、间隔计时时间,单位也还是毫秒。

onTick() 函数是一个计时函数,long millisUntilFinished 参数是还剩多少毫秒,通常将这里的返回的时间设置到 View 对象。

onFinish() 当计时完成以后,会调用该函数,我们可以监听这函数,当倒计时完成以后处理其它业务逻辑。

在阅读 CountDownTimer 源码时,你会发现 CountDownTimer 核心逻辑也是通过 Handler 来实现的。

那为什么我们自己就不用 Handler 实现呢?

自己实现对于一个对 Android 开发、对 Handler 原理非常熟悉的程序员来说,这当然可以,对于一个初级、中级Android开发者来说,还是使用 CountDownTimer 来的方便、更省心一些,毕竟个人智慧永远比不上群体智慧。

在具体使用中,我一般是这样使用的

首先,我会写成一个工具类,继承自 CountDownTimer 主要方便多处调用,少写重复的代码。

构建一个构造函数

onTick 和 onFinish 函数处理相关业务逻辑

以上就是本人对 Android 倒计时的一些浅陋的认识,希望对你有所帮助。

感谢您的阅读,我会更加努力创作更优质的文章!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值