android开发 倒计时和计时的实现

【Android】[2] 如何制作启动倒计时页 前言 实现效果 源码地址 https://github.com/littlecurl/AppProjects 进去找AndroidCountDown或者AndroidCountDown.zip进行下载 前提条件 【红黑联盟】《Android性能优化之Splash页应该这样设计》 主要讲了启动页优化,要把Activity变成Fragment 【深夜网】《App启动页和引导页注意事项》 主要讲了心理... 阅读详情

转自:http://blog.youkuaiyun.com/t12x3456/article/details/7816500

在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢?

在最近的一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法通用,但后来考虑在安卓中是否有更佳的方案,于是乎共找到以下五种实现方案,最终我使用了方案五完成了此功能.

效果如图:

Android实现计时与倒计时(限时抢购)的几种方法

方法一

Timer与TimerTask(Java实现)
public class timerTask extends Activity{

private int recLen = 11;  
private TextView txtView;  
Timer timer = new Timer();  

public void onCreate(Bundle savedInstanceState){  
    super.onCreate(savedInstanceState);  

    setContentView(R.layout.timertask);  
    txtView = (TextView)findViewById(R.id.txttime);  

    timer.schedule(task, 1000, 1000);       // timeTask  
}     

TimerTask task = new TimerTask() {  
    @Override  
    public void run() {  

        runOnUiThread(new Runnable() {      // UI thread  
            @Override  
            public void run() {  
                recLen--;  
                txtView.setText(""+recLen);  
                if(recLen < 0){  
                    timer.cancel();  
                    txtView.setVisibility(View.GONE);  
                }  
            }  
        });  
    }  
};  

}

方法二
TimerTask与Handler(不用Timer的改进型)
public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;
Timer timer = new Timer();

public void onCreate(Bundle savedInstanceState){  
    super.onCreate(savedInstanceState);  

    setContentView(R.layout.timertask);  
    txtView = (TextView)findViewById(R.id.txttime);  

    timer.schedule(task, 1000, 1000);       // timeTask  
}     

final Handler handler = new Handler(){  
    @Override  
    public void handleMessage(Message msg){  
        switch (msg.what) {  
        case 1:  
            txtView.setText(""+recLen);  
            if(recLen < 0){  
                timer.cancel();  
                txtView.setVisibility(View.GONE);  
            }  
        }  
    }  
};  

TimerTask task = new TimerTask() {  
    @Override  
    public void run() {  
        recLen--;  
        Message message = new Message();  
        message.what = 1;  
        handler.sendMessage(message);  
    }  
};  

}
方法三
Handler与Message(不用TimerTask)

public class timerTask extends Activity{
private int recLen = 11;
private TextView txtView;

public void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);    

    setContentView(R.layout.timertask);   
    txtView = (TextView)findViewById(R.id.txttime);  

    Message message = handler.obtainMessage(1);     // Message  
    handler.sendMessageDelayed(message, 1000);  
}    

final Handler handler = new Handler(){  

    public void handleMessage(Message msg){         // handle message  
        switch (msg.what) {  
        case 1:  
            recLen--;  
            txtView.setText("" + recLen);  

            if(recLen > 0){  
                Message message = handler.obtainMessage(1);  
                handler.sendMessageDelayed(message, 1000);      // send message  
            }else{  
                txtView.setVisibility(View.GONE);  
            }  
        }  

        super.handleMessage(msg);  
    }  
};  

}
方法四

Handler与Thread(不占用UI线程)
public class timerTask extends Activity{
private int recLen = 0;
private TextView txtView;

public void onCreate(Bundle savedInstanceState){  
    super.onCreate(savedInstanceState);  

    setContentView(R.layout.timertask);  
    txtView = (TextView)findViewById(R.id.txttime);  

    new Thread(new MyThread()).start();         // start thread  
}     

final Handler handler = new Handler(){          // handle  
    public void handleMessage(Message msg){  
        switch (msg.what) {  
        case 1:  
            recLen++;  
            txtView.setText("" + recLen);  
        }  
        super.handleMessage(msg);  
    }  
};  

public class MyThread implements Runnable{      // thread  
    @Override  
    public void run(){  
        while(true){  
            try{  
                Thread.sleep(1000);     // sleep 1000ms  
                Message message = new Message();  
                message.what = 1;  
                handler.sendMessage(message);  
            }catch (Exception e) {  
            }  

方法五
Handler与Runnable(最简单型)

public class timerTask extends Activity{
private int recLen = 0;
private TextView txtView;

public void onCreate(Bundle savedInstanceState){  
    super.onCreate(savedInstanceState);  

    setContentView(R.layout.timertask);  
    txtView = (TextView)findViewById(R.id.txttime);  

    handler.postDelayed(runnable, 1000);  
}     

Handler handler = new Handler();  
Runnable runnable = new Runnable() {  
    @Override  
    public void run() {  
        recLen++;  
        txtView.setText("" + recLen);  
        handler.postDelayed(this, 1000);  
    }  
};  

}
计时与倒计时
方法1,方法2和方法3,都是倒计时
方法4,方法5,都是计时
计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较
方法1,方法2和方法3,都是在UI线程实现的计时;
方法4和方法5,是另开Runnable线程实现计时

实现方式比较
方法1,采用的是Java实现,即Timer和TimerTask方式;
其它四种方法,都采用了Handler消息处理

推荐使用
如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理
方法5,综合了前几种方法的优点,是最简的

转自:http://blog.youkuaiyun.com/t12x3456/article/details/7816500

———————–2016年9月6日09:49:17————————————
后来采用:

package com.zyl.vincent.utils;

import android.content.Context;
import android.os.CountDownTimer;
import android.widget.TextView;

import com.zyl.vincent.R;

/**
 * 获取验证码的倒计时
 * Created by Vincent on 2016/9/6.
 */

public class TimeCount extends CountDownTimer {

    private TextView tv;
    private Context c;

    /**
     * 初始化,构造函数
     * @param context 上下文对象
     * @param millisInFuture 总的时间
     * @param countDownInterval 一般设置为1000,一秒钟减1
     * @param textView 需要设置倒计时的对象
     */
    public TimeCount(Context context,long millisInFuture, long countDownInterval, TextView textView) {
        super(millisInFuture, countDownInterval);
        this.tv = textView;
        this.c=context;
    }

    @Override
    public void onTick(long l) {//计时开始
        tv.setClickable(false);//设置不可点击
        tv.setTextColor(c.getResources().getColor(R.color.common_color_red));
        tv.setText(l / 1000 + "s");
    }

    @Override
    public void onFinish() {
        tv.setText("再次获取");
        tv.setClickable(true);
    }

}

初始化之后调用start方法启动即可

Android实现计时与倒计时的多种方法 以上是在Android应用程序中实现计时和倒计时功能的两种常见方法。使用Handler和Runnable可以实现自定义的计时器,而CountDownTimer提供了方便的倒计时功能。根据应用程序的需求和个人喜好,选择适合的方法来实现计时和倒计时功能。计时和倒计时功能在Android应用程序中非常常见。本文将介绍几种实现计时和倒计时功能的方法,并提供相应的源代码示例。希望以上内容对您有所帮助,如果有任何疑问,请随时提问。方法一:使用Handler和Runnable。方法二:使用CountDownTimer。 阅读详情

相关推荐

Android 中简单计时器的实现方法(Handler和TimerTask)

方法一、用handler线程创建计时器 计时器效果如下: 第一步:写xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.androi

路宇的博客 1万+

Android计时常用的7种方式

以下计时方式都是Android中常见的计时方式,现总结如下: 1.timer、timertask配合handler计时 2.countdowntimer计时 3.handler精确计时方式 4.handler普通循环方式 5.ScheduleExecuteService定时 6.AlarmManager定时 7.rxJava计时 实现效果图如下: 下面配合具体代码详细介绍上述...

王温暖的博客 2万+

Android自定义双日期选择与倒计时日历控件实战

自定义日历控件是提高应用程序用户交互体验的重要组件,它的开发初衷是为了提供一种更直观、易用的日期选择方式。在日常开发中,开发者往往会发现标准的日期选择器不能完全满足特定的业务需求,例如,需要同时选择开始和结束日期,或者需要以特殊方式展示日期信息。因此,本章将介绍如何实现一个灵活、可定制的日历控件。

weixin_42360846的博客 1305

Android:计时任务

【代码】Android:计时任务。

weixin_51109304的博客 330

Android ListView项中的倒计时实现指南

本文还有配套的精品资源,点击获取 简介:在Android开发中,ListView组件常用于展示列表数据。本教程旨在介绍如何在ListView的每个项中添加倒计时功能,例如电商应用中的订单状态显示。教程涵盖倒计时视图的XML设计,自定义Adapter的创建,倒计时数据模型的定义,以及使用Handler和Runnable实现倒计时逻辑的详细步骤。通过这种方式,开发者可以在应用中...

weixin_34162851的博客 1119

Android倒计时功能实现详解及Demo

在Android开发中,类是一个专门用于实现倒计时功能的辅助类。它允许开发者以指定的时间间隔执行倒计时更新,这对于开发需要倒计时功能的应用十分有用,比如定时任务提醒、计时器、游戏计时等场景。// 更新倒计时界面的代码// 倒计时完成后的操作代码使用类很简单,只需创建一个该类的实例,并重写onTick和onFinish方法。onTick方法会在每个时间间隔被调用,你可以在这里更新界面元素,比如显示剩余时间的TextView。onFinish。

weixin_29301059的博客 1295

Android 四种计时器Thread、Timer、CountDownTimer、handler.postDelayed的使用

Android 四种计时器Thread、Timer、CountDownTimer、handler.postDelayed的使用

qq_27494201的博客 2075

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1361

android 短视频开发,依靠Kotlin和Handler实现倒计时

android 短视频开发,依靠Kotlin和Handler实现倒计时效果 1、布局文件 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-aut

云豹网络科技 625

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程

本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。

weixin_29289821的博客 165

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 249

iapp进度条倒计时_App启动页倒计时功能

示例代码采用 RxJava +RxLifecycle + Data-Binding 模式编写示例图:话不多说,实现方式如下:1.导入依赖库①RxJava: Reactive Extensions for the JVMcompile 'io.reactivex:rxjava:1.2.9'compile 'io.reactivex:rxandroid:1.2.1'②RxLifecyclecom...

weixin_30744613的博客 1384

FOC实战笔记:RC吸收电路的设计考量与参数调优

本文深入探讨了FOC驱动器中RC吸收电路的设计与调优。针对MOS管开关过程中的电压尖峰问题,详细阐述了RC电路的钳位与能量吸收原理,并提供了从参数计算、实验调试到布局布线的完整实战指南,旨在帮助工程师有效提升系统可靠性与稳定性。

weixin_29219539的博客 273

安卓倒计时

安卓倒计时

T_Y_F_的博客 165

VBA常见错误 - “错误3706,未找到提供程序,该程序可能未正确安装”解决方法

1、问题描述 在利用VBA编程时,引用其它表格数据,出现以下问题: (1)运行“错误3706,未找到提供程序,该程序可能未正确安装”。 (2)引用数据失败 2、解决方法 下载“Access 2010 数据库引擎”,并安装即可。 https://www.microsoft.com/en-us/download/details.aspx?id=54920 AccessDatabaseEngine 2010 官方安装包,官网下载不了的可以来这里下载。(1)运行“错误3706,未找到提..

Nemuel的博客 3万+

Godot 4.x 实现 JRPG 回合制战斗系统:架构、状态机与实战优化

游戏开发中,状态机是管理复杂逻辑流转的核心设计模式,尤其在回合制战斗这类事件驱动的场景中。其原理是通过定义有限的状态和明确的转移条件,来控制系统在不同阶段的行为,从而实现清晰、可维护的流程控制。这项技术的价值在于能够将杂乱的条件判断代码结构化,降低模块间的耦合度,提升代码的可读性和可扩展性。在游戏开发领域,状态机广泛应用于角色AI、UI流程、战斗系统等场景。本文以Godot引擎为例,深入探讨如何运用节点与信号驱动架构,构建一个健壮的JRPG(日式角色扮演游戏)回合制战斗系统。内容涵盖从核心的**状态机**设

weixin_33749242的博客 499

android 广告效果图,Android开发实现加载广告图片和倒计时的开屏布局

package cn.waps.extend;import android.app.Activity;import android.content.Context;import android.content.res.Configuration;import android.graphics.Color;import android.graphics.drawable.ShapeDrawable;...

weixin_42376799的博客 337

YOLO11后处理优化 | 引入DIoU-NMS替代传统NMS,解决高重叠目标误删,召回率大幅提升

YOLO11模型在密集目标场景下存在NMS后处理导致的漏检问题。本文提出采用DIoU-NMS替代传统NMS,通过引入中心点距离信息,有效区分重叠但不同的目标,提升召回率。文章详细分析了传统NMS的三大局限性,对比了Soft-NMS和DIoU-NMS的优劣,并给出在YOLO11中实现DIoU-NMS的完整代码方案。该方法特别适用于安防监控、自动驾驶等目标密集场景,能够在不显著增加计算量的情况下显著改善检测效果。

2601_95807009的博客 150

安卓开发实现倒计时功能

在安卓开发中,实现倒计时功能通常涉及使用Handler类或者更现代的Coroutine(如果你在使用 Kotlin 及其协程库)等方法。

qq_43664361的博客 1261

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1209

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android -- CountDownTimer

Android中文API(143) —— CountDownTimer 前言   本章内容android.os.CountDownTime章节,版本为Android 4.0 r1,翻译来自:"liliang1222" 声明   欢迎转载,但请保留文章原始出处:)     博客园:http://www.cnblogs.c...

weixin_30767921的博客 141

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android开发之设置60s倒计时

同样是最近做项目碰到的一点小知识,拿出来和大家分享一下。要实现的功能是点击发送按钮后手机会接收到验证码,但是有的时候由于短信网关故障等原因可能不能及时收到短息,所以设置一种倒计时机制,当倒计时时间结束后如果还没有收到验证码短信则可以选择重新发送验证码。 首先说一下我们今天用的到CountDownTimer这个抽象类,实现了倒计时的功能。将后台线程的创建和Handler队列封装成一个方便的类调用。

u011895534的博客 4359

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android实现倒计时之使用CountDownTimer

在开发中会经常用到倒计时这个功能,包括给手机发送验证码等等,之前我的做法都是使用Handler + Timer + TimerTask来实现,现在发现了这个类,果断抛弃之前的做法,相信还是有很多人和我一样一开始不知道Android已经帮我们封装好了一个叫CountDownTimer的类。从字面上就可以看出来它叫倒数计时器又称定时器或计时器,采用Handler的方式实现,将后台线程的创建和Handle

Angelica 2万+

Android实现正数计时/倒计时

public class MainActivity extends AppCompatActivity implements Chronometer.OnChronometerTickListener, View.OnClickListener { private Chronometer mChronometer; int current = 0; private MyCountDownTimer myCountDownTimer; private TextView m..

weixin_43117800的博客 1625

安卓倒计时方案实现经验案例

基于CountDownTimer的Android倒计时方案实现

ningmengjiang3的博客 1527
上一篇: android开发 权限适配6.0 permissionsdispatcher的安装使用
下一篇: android开发 判断app是否是第一次安装
Android小屋
博客等级 码龄12年 82粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值