iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Android中CountDownTimer类怎么用
  • 781
分享到

Android中CountDownTimer类怎么用

2023-06-22 03:06:56 781人浏览 八月长安
摘要

这篇文章主要介绍Android中CountDownTimer类怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、概述项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而Google官方也帮我们封装

这篇文章主要介绍Android中CountDownTimer类怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、概述

项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而Google官方也帮我们封装好了一个类:CountDownTimer,使我们的开发更加方便;

二、api

CountDownTimer是一个抽象类,有两个抽象方法,它的API很简单

public abstract void onTick(long millisUntilFinished);//这个是每次间隔指定时间的回调,millisUntilFinished:剩余的时间,单位毫秒public abstract void onFinish();//这个是倒计时结束的回调

使用的时候只需要

new CountDownTimer(long millisInFuture, long countDownInterval)//millisInFuture:倒计时的总时长//countDownInterval:每次的间隔时间  单位都是毫秒

三、基本使用方法

我们以短信验证码的倒计时来看,点击获取验证码,倒计时60s不可点击

new CountDownTimer(60 * 1000, 1000) {    @Override    public void onFinish() {        if (tvCode != null) {            tvCode.setText("重新获取");            tvCodeWr.setTextColor(Color.parseColor("#E94715"));            tvCode.setClickable(true);            tvCode.setEnabled(true);        }        cancel();    }    @Override    public void onTick(long millisUntilFinished) {        if (tvCode != null) {            tvCode.setClickable(false);            tvCode.setEnabled(false);            tvCode.setText(millisUntilFinished / 1000 + "s");            tvCode.setTextColor(Color.parseColor("#999999"));        }    }}.start();

点击按钮,获取验证码成功之后就可以执行以上操作,最后一定要start,不然不会执行

四、使用注意

CountDownTimer使用很简单,但是坑很多,需要注意避免踩坑。

1、空指针:

如果在activity或者fragment关闭销毁的时候没有调用cancle方法,它的onTick方法还是会继续执行,这个时候UI控件都为空,不注意判断的话很容易空指针

2、时间不是太准的问题:

我们看CountDownTimer的源码可以看到,在执行onTick的方法时,google源码里面减去了程序执行到这里的时候所消耗的时间,这里可以看出google代码的严谨

final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();if (millisLeft <= 0) {    onFinish();} else if (millisLeft < mCountdownInterval) {    // no tick, just delay until done    sendMessageDelayed(obtainMessage(MSG), millisLeft);}

所以一开始倒计时的时间是59,这里可以在构造方法里面稍微加一点时间就可以解决如:

new CountDownTimer(60 * 1000+300, 1000)

3、内存泄漏问题

首先我们来看源码,核心代码如下

private Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {        synchronized (CountDownTimer.this) {            if (mCancelled) {                return;            }            final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();            if (millisLeft <= 0) {                onFinish();            } else if (millisLeft < mCountdownInterval) {                // no tick, just delay until done                sendMessageDelayed(obtainMessage(MSG), millisLeft);            } else {                long lastTickStart = SystemClock.elapsedRealtime();                onTick(millisLeft);                // take into account user's onTick taking time to execute                long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();                // special case: user's onTick took more than interval to                // complete, skip to next interval                while (delay < 0) delay += mCountdownInterval;                sendMessageDelayed(obtainMessage(MSG), delay);            }        }    }};

可以看到CountDownTimer的原理还是用到了Handler,所以很容易造成内存泄漏问题,当Activity或者Fragment关闭而倒计时还未结束的时候,会在后台一直执行,而很多时候我们用倒计时会有更新UI的操作,而控件都持有activity的引用,长期得不到释放的话就会造成内存泄漏,甚至会造成1所说的空指针问题,所以一般要在activity或fragment销毁的时候调用cancle方法。

我自己把这个进行了封装,写成了一个工具类以供参考:

public class TimeUtils {    private String color;//这里可以修改文字颜色    WeakReference<TextView> tvCodeWr;//控件软引用,防止内存泄漏    private CountDownTimer timer;    public TimeUtils(TextView tvCode, String color) {        super();        this.tvCodeWr = new WeakReference(tvCode);        this.color = color;    }//这是倒计时执行方法    public void RunTimer() {        timer = new CountDownTimer(60 * 1000 - 1, 1000) {            @Override            public void onFinish() {                if (tvCodeWr.get() != null) {                    tvCodeWr.get().setText("重新获取");                    tvCodeWr.get().setTextColor(Color.parseColor(color));                    tvCodeWr.get().setClickable(true);                    tvCodeWr.get().setEnabled(true);                }                cancel();            }            @Override            public void onTick(long millisUntilFinished) {                if (tvCodeWr.get() != null) {                    tvCodeWr.get().setClickable(false);                    tvCodeWr.get().setEnabled(false);                    tvCodeWr.get().setText(millisUntilFinished / 1000 + "s");                    tvCodeWr.get().setTextColor(Color.parseColor("#999999"));                }            }        }.start();    }//这个方法可以在activity或者fragment销毁的时候调用,防止内存泄漏    public void cancle() {        if (timer != null) {            timer.cancel();            timer = null;        }    }}

以上是“Android中CountDownTimer类怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Android中CountDownTimer类怎么用

本文链接: https://www.lsjlt.com/news/302201.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中CountDownTimer类怎么用
    这篇文章主要介绍Android中CountDownTimer类怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、概述项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而google官方也帮我们封装...
    99+
    2023-06-22
  • Android中CountDownTimer类详解
    一、概述 项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而google官方也帮我们封装好了一个类:CountDownTimer,使我们的开发更加方便; 二、API ...
    99+
    2024-04-02
  • java中CountDownTimer怎么使用
    CountDownTimer 是一个用于倒计时的类,可以在指定时间内执行任务。首先,你需要创建一个 CountDownTimer 的...
    99+
    2023-10-20
    java
  • Android中怎么利用CountDownTimer实现验证码倒计时效果
    今天就跟大家聊聊有关Android中怎么利用CountDownTimer实现验证码倒计时效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、需求分析点击按钮之后,按钮文字变为“ns...
    99+
    2023-05-30
    android countdowntimer
  • 怎么在Android中利用CountDownTimer实现一个倒计时功能
    这篇文章主要介绍了怎么在Android中利用CountDownTimer实现一个倒计时功能,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:Android是什么Android是一种基于Lin...
    99+
    2023-05-30
    android countdowntimer
  • Android中CountDownTimer 实现倒计时功能
    CountDownTimerCountDownTimer 是android 自带的一个倒计时类,使用这个类可以很简单的实现 倒计时功能CountDownTimer 的实现方式 new CountDownTimer(6000,100...
    99+
    2023-05-31
    countdowntimer 倒计时 tim
  • Android项目中利用CountDownTimer实现一个倒数功能
    Android项目中利用CountDownTimer实现一个倒数功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现倒计时的效果例子:发送验证码按钮效果图:p...
    99+
    2023-05-31
    android countdowntimer tim
  • Android中怎么利用PagerAdapter封装类
    Android中怎么利用PagerAdapter封装类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ViewPager是android的support库中的一个控件,也是一...
    99+
    2023-05-30
    android pageradapter
  • Android中MediaPlayer工具类怎么使用
    在Android中,MediaPlayer是一个用于播放音频和视频的工具类。下面是一些使用MediaPlayer的基本步骤: 创...
    99+
    2023-10-21
    Android MediaPlayer
  • 如何在Android中使用Handler与Countdowntimer实现一个倒计时功能
    本篇文章为大家展示了如何在Android中使用Handler与Countdowntimer实现一个倒计时功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实现方法去除actionBar闪屏页面一般都...
    99+
    2023-05-31
    android handler countdowntimer
  • Android Kotlin类怎么使用
    这篇文章主要介绍“Android Kotlin类怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android Kotlin类怎么使用”文章能帮助大家解决问题。1. 类的声...
    99+
    2023-07-02
  • Android中怎么利用HttpUrlConnection类下载文件
    Android中怎么利用HttpUrlConnection类下载文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体代码如所示:  pri...
    99+
    2023-05-30
    android httpurlconnection
  • Android中CameraManager类的作用是什么
    本篇文章给大家分享的是有关Android中CameraManager类的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体内容如下  privat...
    99+
    2023-05-30
    android
  • Android中dialoginterface类的作用是什么
    DialogInterface类在Android中用于定义对话框的接口,它提供了一组方法来处理对话框的各种事件。通过实现Dialog...
    99+
    2023-09-21
    Android
  • 怎么在Android中利用ClassLoader对类进行加载
    本篇文章给大家分享的是有关怎么在Android中利用ClassLoader对类进行加载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的类加载设计了一套双亲代理的模式,使...
    99+
    2023-05-31
    classloader android roi
  • android中如何使用graphics.Matrix类
    这期内容当中小编将会给大家带来有关android中如何使用graphics.Matrix类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Matrix类包含了一个3x3的矩阵用来改变坐标,它没有一个构造器来...
    99+
    2023-05-30
    android
  • Android开发中文件操作工具类FileUtil怎么用
    这篇文章将为大家详细讲解有关Android开发中文件操作工具类FileUtil怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:package com.ymerp.android.t...
    99+
    2023-05-30
    android
  • Android中NotificationListenerService怎么用
    这篇文章主要介绍了Android中NotificationListenerService怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用新建一服务类,使它继承Noti...
    99+
    2023-05-31
    android
  • Android中relativelayout.layoutparams怎么用
    RelativeLayout.LayoutParams 是 RelativeLayout 的子类,用于设置子视图在 Relative...
    99+
    2024-02-29
    Android
  • Android中Gson怎么用
    小编给大家分享一下Android中Gson怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 导入Android Studio工程dependencies {    ...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作