旅游网站开发意义和价值,域名服务器上存放着,天津网站设计哪家公司好,百度地图在线导航查询安卓 实现60s倒计时的CountDownTimer#xff08;小坑#xff09; 前言一、CountDownTimer 是什么#xff1f;二、代码示例1.使用2.小坑的点误差及时取消 总结 前言
前段时间写倒计时没有用线程#xff0c;想换一种实现方式结果踩了个小坑#xff0c;特此记录。 一、Count… 安卓 实现60s倒计时的CountDownTimer小坑 前言一、CountDownTimer 是什么二、代码示例1.使用2.小坑的点误差及时取消 总结 前言
前段时间写倒计时没有用线程想换一种实现方式结果踩了个小坑特此记录。 一、CountDownTimer 是什么
CountDownTimer 是 Android 系统提供的一个用于倒计时的类主要用于实现倒计时功能是 Android 开发中常用的一个类。通过 CountDownTimer我们可以很方便地实现各种倒计时需求比如验证码倒计时、秒杀倒计时、开奖倒计时等等。在 Android 开发中CountDownTimer 可以说是一个非常常用的工具类但是不得不说的是它也有一些坑。
二、代码示例
1.使用
代码如下示例 /*** time 2023/9/18 16:03* Description: 验证码倒计时 */private fun initCountDownTimer() {mCountDownTimer object : CountDownTimer(300 * 1000300, 1000) {SuppressLint(SetTextI18n)override fun onTick(p0: Long) {mBinding.tvSendCode.text formatCountdown(p0)if (p0 0) {onFinish()}}override fun onFinish() {mBinding.tvSendCode.text resources.getString(R.string.ctv_send_code)}}}/*** 时间显示格式大于60s时为xx分xx秒小于等于60s时只显示xx秒*/fun formatCountdown(time: Long): String {var result if (time 60000) {result ${(time / 60000).toInt()} m ${(time % 60000) / 1000} s} else {result ${(time / 1000).toInt()} s}return result}CountDownTimer有两个参数单位都是毫秒
millisInFuture:倒计时的总时长countDownInterval每次的间隔时间
上例代码我们可以看到是从onTick中更新倒计时。
2.小坑的点
误差
CountDownTimer 会有一定的误差如果是小的时间可以不用管太多多加300毫秒就能解决问题不大所以上例代码我们是这样的
CountDownTimer(300 * 1000300, 1000)及时取消
如果我们开始了CountDownTimer 然后中途退出了页面需要调用CountDownTimer 的cancel方法取消倒计时否则CountDownTimer 会继续执行不仅有内存泄漏的风险还会因为控件已经被回收而报错空指针。 总结
本文介绍了 Android 开发中常用的 CountDownTimer 类用于实现倒计时功能包括代码示例和小坑的点。需要注意的是CountDownTimer 有一定的误差需要注意及时取消以避免内存泄漏和空指针问题。
参考 CountDownTimer使用心得及总结