• 安卓 实现60s倒计时的CountDownTimer(小坑)



    在这里插入图片描述

    前言

    前段时间写倒计时没有用线程,想换一种实现方式结果踩了个小坑,特此记录。


    一、CountDownTimer 是什么?

    CountDownTimerAndroid 系统提供的一个用于倒计时的类,主要用于实现倒计时功能,是 Android 开发中常用的一个类。通过 CountDownTimer,我们可以很方便地实现各种倒计时需求,比如验证码倒计时、秒杀倒计时、开奖倒计时等等。在 Android 开发中,CountDownTimer 可以说是一个非常常用的工具类,但是不得不说的是它也有一些坑。

    二、代码示例

    1.使用

    代码如下(示例):

        /**
         * @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
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    CountDownTimer有两个参数,单位都是毫秒

    • millisInFuture:倒计时的总时长
    • countDownInterval:每次的间隔时间

    上例代码我们可以看到是从onTick中更新倒计时。

    2.小坑的点

    误差

    CountDownTimer 会有一定的误差,如果是小的时间可以不用管太多,多加300毫秒就能解决,问题不大,所以上例代码我们是这样的

    CountDownTimer(300 * 1000+300, 1000)
    
    • 1

    及时取消

    如果我们开始了CountDownTimer ,然后中途退出了页面,需要调用CountDownTimer 的cancel方法取消倒计时,否则CountDownTimer 会继续执行,不仅有内存泄漏的风险,还会因为控件已经被回收而报错空指针。


    总结

    本文介绍了 Android 开发中常用的 CountDownTimer 类,用于实现倒计时功能,包括代码示例和小坑的点。需要注意的是,CountDownTimer 有一定的误差,需要注意及时取消,以避免内存泄漏和空指针问题。

    参考 CountDownTimer使用心得及总结

  • 相关阅读:
    跟艾文学编程《Python基础》(1)Python 基础入门
    Loj#3320-「CCO 2020」旅行商问题
    为什么用Selenium做自动化测试,你真的知道吗?
    在家怎么连接学校电脑的相关部署?
    Tableau同比卡片制作
    eggjs+vue3 一个简单的菜单树增删改查实现
    基于SpringBoot的宠物领养网站管理系统
    python的深浅copy
    mysql57开启biglog并查看biglog保姆级教程
    Jenkins 参数化构建中 各参数介绍与示例
  • 原文地址:https://blog.csdn.net/shop_and_sleep/article/details/133945671