赞
踩
前段时间写倒计时没有用线程,想换一种实现方式结果踩了个小坑,特此记录。
CountDownTimer 是 Android 系统提供的一个用于倒计时的类,主要用于实现倒计时功能,是 Android 开发中常用的一个类。通过 CountDownTimer,我们可以很方便地实现各种倒计时需求,比如验证码倒计时、秒杀倒计时、开奖倒计时等等。在 Android 开发中,CountDownTimer 可以说是一个非常常用的工具类,但是不得不说的是它也有一些坑。
代码如下(示例):
/** * @time 2023/9/18 16:03 * @Description: 验证码倒计时 */ private fun initCountDownTimer() { mCountDownTimer = object : CountDownTimer(300 * 1000+300, 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有两个参数,单位都是毫秒
上例代码我们可以看到是从onTick中更新倒计时。
CountDownTimer 会有一定的误差,如果是小的时间可以不用管太多,多加300毫秒就能解决,问题不大,所以上例代码我们是这样的
CountDownTimer(300 * 1000+300, 1000)
如果我们开始了CountDownTimer ,然后中途退出了页面,需要调用CountDownTimer 的cancel方法取消倒计时,否则CountDownTimer 会继续执行,不仅有内存泄漏的风险,还会因为控件已经被回收而报错空指针。
本文介绍了 Android 开发中常用的 CountDownTimer 类,用于实现倒计时功能,包括代码示例和小坑的点。需要注意的是,CountDownTimer 有一定的误差,需要注意及时取消,以避免内存泄漏和空指针问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。