倒计时、定时器的七种方式,有这篇就够了

RxJava创建倒计时器 用RxJava创建一个倒计时计时器,感觉是一个很简单的事情,用intervalRange操作符就可以搞定了。但是我的场景是,需要点击Button(重新获取数据)去进行网络请求,将请求的结果进行UI显示,并进行倒计时计算。网络请求的返回体如下所示: public class Response { private String data; // 网络请求的数据 private long countDownSeconds; // 剩余的时间数,单位 s } 我的初步实现如下(MainActi 阅读详情

倒计时、定时器的使用次数也不少,这篇文章做一个总结,不用每次需要的时候到处去百度了,本文章内的代码都经过本人亲测有效!
注意每次使用定时器的时候在不需要的时候都要及时取消掉,不要让不需要的定时器拖垮应用

方式一:

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //十秒之后在这进行操作
            }
        },10000);

方式二:

//View线程实现延迟处理,内部基本与方式一一样,只不过Handler由视图提供
// mView 是我们的控件
  mView.postDelayed(new Runnable() {
      @Override
      public void run() {
        //三秒之后走这里

      }
  },3000);

方式三:

//别忘了 onDestroy() 内进行销毁,防止内存溢出
//第一个参数是总共多长时间,第二个参数是频率时间
        CountDownTimer countDownTimer = new CountDownTimer(10000, 1000){

            @Override
            public void onTick(long millisUntilFinished) {
               //  每刷新一次都走一次这里
               //  millisUntilFinished/1000 这是秒
            }

            @Override
            public void onFinish() {
               //字面意思,倒计时结束时走这里
            }
        };
        countDownTimer.start();//开启刷新
        countDownTimer.cancel();//取消刷新

方式四:

//定时器
        Timer timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                       //每次刷新再次操作
                    }
                });

            }
        };
        timer.schedule(timerTask,0,1000);//开启刷新,第二个参数是多长时间之后开始倒计时,第三个参数是多长时间进行一次
        timer.cancel();//取消定时器
        

方式五:

    int time = 10;
    Handler mHandler = new Handler();
    Runnable myRunnale = new Runnable() {
        @Override
        public void run() {
            time--;
            if(time>0){
                //每次刷新走这里
               
            }else{
                //倒计时结束走这里
            }
        }
    };
    mHandler.post(myRunnale);//开始倒计时
    mHandler.postDelayed(myRunnale,1000); //延迟倒计时
    mHandler.removeCallbacks(myRunnale); //移除倒计时

方式六:

使用 rxjava

首先导入依赖

implementation 'io.reactivex.rxjava3:rxjava:3.0.4'     

使用

    //定时器
    private var mVideoDuration: Disposable? = null
    clearData()
    //第一个参数是多长时间开始,第二个参数是间隔时间,第三个参数是单位,可以是秒,分钟,小时,天
    mVideoDuration = ObservableTake.interval(0, 1, TimeUnit.SECONDS)
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe({
                 //每次倒计时走这里   
             }, {})
    
    /**
     * 清除定时器*/
    fun clearData() {
        if (mVideoDuration != null) {
            mVideoDuration!!.dispose()
        }
    }     

方式七(不推荐):

int stopTime = 10;
new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    if (stopTime > 0){
                        //主线程操作数据
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //每次刷新走这里
                            }
                        });
                        stopTime--;
                    }else {
                        //倒计时操作
                    }
                    try{
                        Thread.sleep(1000);
                    }catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

最后赠送一个双击退出的代码:

private Long finishTime  = 0L
if (System.currentTimeMillis() - finishTime > 1500) {
           Toast.makeText(getBaseContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();
           finishTime = System.currentTimeMillis();
    } else {
           Toast.makeText(getBaseContext(),"我退出了",Toast.LENGTH_SHORT).show();
    }
Android开发中如何使用Rxjava框架实现倒计时功能 的话,那一切都会变得简单。首先我们要在子线程中直接使用发射器,时间间隔设置在1s,然后等主线程接收后更新UI后,倒计时结束时,恢复界面,下面给出在用户注册时获取验证码的,倒计时使用的代码demo。 阅读详情

相关推荐

DSP56720三重定时器模块:从基础定时到PWM生成的嵌入式时序控制

在嵌入式系统开发中,定时器是控制时序、实现精准时间管理的核心硬件模块。其基本原理是通过可编程计数器,在时钟驱动下进行计数,并在达到预设值时产生中断或触发特定动作,从而为系统提供稳定的时间基准。这种硬件定时机制的技术价值在于能解放CPU,实现高精度、低功耗的实时控制,广泛应用于电机驱动、音频采样和通信同步等场景。以飞思卡尔DSP56720的三重定时器模块(TEC)为例,它集成了七种工作模式,包括基础定时、事件计数、脉宽测量和PWM生成,通过配置TCSR、TLR、TCPR等核心寄存器,开发者可以灵活实现从简单周

weixin_33925615的博客 321

RxJava 倒计时,轮询器

RxJava 实现定时器,轮询笔记。

男儿不展风云志,空负天生八尺躯。 858

STM32F103定时器原理与实战:从LED闪烁到电机控制

定时器是嵌入式系统的时间基石,其本质是基于时钟源的可编程计数单元,通过预分频器(PSC)和自动重装载寄存器(ARR)协同实现精确周期控制。理解APB总线分频规则(如APB1分频为2时定时器时钟翻倍)和更新事件(UIF)触发机制,是避免频率偏差、中断失效等典型问题的关键技术前提。该机制支撑着LED精准闪烁、PWM电机驱动、输入捕获测频等核心工业应用场景。对于STM32F103系列——尤其是资源丰富的VET6封装——掌握TIM2/TIM3/TIM6等通用与基本定时器的寄存器级配置与CubeMX图形化协同方法,意

weixin_30819085的博客 665

RxJava之倒计时

Android应用开发中经常用到倒计时的功能由好多种方式去实现如CountDownTimer,Handler&Timer&TimerTask或是原生控件Chronometer等,但是RxJava给了我们更好的选择。 RxJava1.x版本的实现是利用interval()与take()操作符结合实现的直接上代码: public static Observable<Int

JamesP1949的博客 734

基于Rxjava实现轮询定时器

本文实例为大家分享了Rxjava实现轮询定时器的具体代码,供大家参考,具体内容如下 作用 1、实现了延迟若干毫秒后,执行next操作,只执行一次 2、实现了每隔若干毫秒后,执行next操作,可执行多次 工具类源码 /** * Copyright 2015-2018 Hive Box. */ package com.fcbox.locker.shrail.utils; import android.support.annotation.NonNull; import com.fcbox.locker.sdk.Locker; import com.fcbox.locker.sdk.log.

android使用Rxjava实现倒计时功能

主要为大家详细介绍了android使用Rxjava实现倒计时功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

ng-zorro-antd Statistic 倒计时组件(nz-countdown)完全指南:格式化、事件与源码实现

本文是围绕 ng-zorro-antd(Angular UI 组件库,基于 Ant Design)中 `nz-countdown` 倒计时组件编写的实战指南。倒计时组件常用于电商大促抢购、活动开始时间、考试倒计时、运营倒计时等需要突出展示"距离某个时间点还剩多久"的场景。读完本文,你将掌握 `nz-countdown` 的全部 API 用法、`nzFormat` 占位符格式化规则、`(nzCoun

gitblog_00602的博客 240

Android 使用 RxJava2 实现倒计时功能的示例代码

倒计时功能被广泛运用在 App 启动页、短信验证码倒计时等,通常做法是起一个Handler ,在子线程里完成倒计时,如今这一做法有了替代品 —— RxJava ,RxJava是被行内一致认可的第三方开源库,我们可以使用RxJava实现倒计时功能。 示例图: 示例代码: 导入必要的库文件(Android支持库和Reactivex系列支持库) implementation 'com.android.support:appcompat-v7:27.1.0' implementation 'com.android.support.constraint:constraint-layout:1.

JavaScript如何中断循环执行?

我们在开发过程中经常会需要将我们设置好的语句根据一定的规则中断执行,这样才能完成功能,那么你知道都有哪些方式能够实现这个效果吗? 方法一:break 方法二:return 方法三:continue 方法四:逻辑操作符||(或者) 从左往右开始识别如果第一个就是 true 那就不会再往后识别 直接把第一个的值作为结果返回 console.log(1 || 0); 方法五:default 前面的条件都不满足的时候执行 方法六:定时器 倒计时定时器(炸弹定时器)只会执行一次 方法七:解绑事件 remov

xiaoxijinger的博客 2867

物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等

1.前言 最近对物联网产品自组网技术选型,找到合适的组网技术,让产品自行组网并完成数据的传输。 2.参数对比

谁念西风独自凉 4万+

惊爆揭秘!异步启动永磁同步电机,调速核心技术大起底

传统的同步启动方式需要额外的同步设备,成本高且维护复杂。异步启动PMSM则巧妙地利用了鼠笼感应电机的启动原理,无需额外同步设备即可实现安全可靠的启动。其核心思想是将定子电流分解为两个正交的分量:磁链分量(id)和转矩分量(iq),分别控制这两个分量,从而实现对电机转矩的精确控制。随着电机设计技术的不断进步和控制算法的不断优化,异步启动PMSM的性能将得到进一步提升,应用范围也将更加广泛。异步启动PMSM的调速技术是其核心技术之一,直接影响着电机的性能和应用范围。

wen8789的博客 983

基于VC++6.0与MFC框架的俄罗斯方块游戏开发实战详解

Windows图形编程是理解操作系统图形界面与消息机制的基础,其核心在于通过GDI(图形设备接口)进行图形绘制与渲染。在事件驱动的桌面应用开发中,消息循环与定时器机制是实现动态交互与动画的关键原理。掌握这些底层技术对于构建高性能、响应迅速的应用程序具有重要价值,尤其在游戏开发、工业控制等对实时性要求较高的场景中。本文以经典的俄罗斯方块游戏为实践案例,深入剖析如何运用MFC框架的文档-视图架构进行数据与界面的分离设计,并详细讲解如何通过双缓冲技术解决图形闪烁问题,以及如何实现基于定时器的游戏循环与精确的碰撞检

weixin_34082854的博客 379

让Qt程序适配高分辨率屏幕,解决软件界面错乱异常

前期使用Qt开发一个登录模块一直使用很好。最近在一台新电脑上使用时发现排版混乱。这个问题很普遍,主要原因是旧软件对高清显示器的适配不当造成的。新电脑使用的是4K屏,win10系统自动进行了175%的缩放。

cihron的博客 1万+

基于单片机的多模式自动洗衣机设计与实现

本文设计了一种基于STC89C52单片机的智能洗衣机控制系统,通过按键、LCD显示、继电器控制等模块实现七种洗涤模式的自动化运行。系统采用模块化设计,包括主控模块、电机驱动、水位检测和蜂鸣报警等功能单元,通过C语言程序实现模式选择、电机正反转控制和时间管理。测试表明系统能稳定运行各洗涤程序,具有良好扩展性,为智能家电开发提供了参考方案。

xuezhang666666的博客 1254

Qt+PCL实战:如何用QVTKOpenGLNativeWidget高效渲染3D点云(附完整代码)

本文深入解析了Qt与PCL结合使用QVTKOpenGLNativeWidget进行高效3D点云渲染的实战技术。通过对比传统QVTKWidget,详细介绍了QVTKOpenGLNativeWidget在渲染效率、内存占用和兼容性方面的显著优势,并提供了完整的代码示例和性能优化策略,助力开发者在工业检测、自动驾驶等领域实现更高效的点云可视化。

keras9composer的博客 687

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1084

有限状态机设计模式入门指南,C语言,嵌入式,单片机,微控制器,CPU,微机原理,计算机组成原理

《有限状态机初学者研究报告》摘要 本报告系统分析了有限状态机(FSM)从基础到高级的多种实现方式。报告首先介绍了FSM的基本概念、组成要素和工作原理,阐述了其在嵌入式系统、通信协议等场景的应用价值。随后详细对比了8种实现版本:从简单的switch-case嵌套到支持消息队列和参数传递的高级实现,分析了各版本的优缺点及适用场景。报告还提供了状态机设计的最佳实践建议,包括设计原则、实现技巧和常见问题解决方案,并给出基础版和高级版的代码模板。研究表明,应根据系统复杂度选择合适实现方式:简单系统适用switch-c

C++,Java,Python,C#编程选手,偶尔刷刷leetcode 928

推荐系统中召回率Recall计算方式附代码

Recall(召回率)是指在所有实际有交互的用户 - 物品对中,推荐系统成功预测出的比例。具体来说,设所有有交互的用户 - 物品对为S,推荐系统预测出的用户 - 物品对为T,则Recall的计算公式为:

优快云 精品推荐 1842

STM32F10x TIM2定时中断全链路解析:从时钟树到NVIC

定时器是嵌入式系统实现精确时间控制的核心外设,其本质是基于时钟分频与计数溢出的硬件机制;理解定时中断需掌握时钟源选择、预分频器(PSC)与自动重装载寄存器(ARR)协同计算、NVIC三级中断裁决等底层原理;该技术支撑毫秒级任务调度、ADC同步采样、电机控制等关键应用;在STM32F10x平台中,TIM2因直连APB1高频时钟、支持多模式及完整通道,成为高精度定时首选;结合标准外设库v3.5.0与寄存器级操作,可实现低抖动、高可靠中断响应。

weixin_30493401的博客 477

辐射制冷无规散射结构非球形散射体的结构优化与设计准则

本文针对辐射制冷材料中非球形散射体的光散射特性开展研究,提出了一种基于体积散射截面和不对称因子的综合评价方法。通过建立简化模型分析球体、圆柱体、长方体等六种几何形状在太阳波段的散射性能,发现金字塔形和圆锥形具有更强的后向散射能力。研究创新性地提出"反射因子SR=S(1-g)"这一评价参数,该参数与宏观反射率高度相关,为非球形散射体的优化设计提供了定量依据。仿真结果表明,合理选择散射体形状可显著提升辐射制冷材料的太阳反射率,为实现高效被动制冷提供了新的结构设计思路。

huanghm88的专栏 79

数学与纳米技术:微观世界的数学描述

《数学与纳米技术:微观世界的数学描述》 关键词:纳米技术、数学模型、微观世界、物理现象、计算模拟 摘要:本文探讨了数学在纳米技术领域的应用,从数学基础回顾、纳米技术引论,到物理现象与

AI天才研究院 1532

CentOS 8 用户管理:从 adduser/userdel 到权限生命周期闭环

Linux 用户管理本质是权限主体的全生命周期治理,而非简单的账号增删。其底层依托 PAM 认证栈、systemd 用户实例、SELinux 上下文继承与 sudoers 规则引擎协同工作。理解 useradd/userdel 的默认行为差异、-r/-f/-Z 等参数的真实系统调用影响,以及 wheel 组授权依赖的三重校验(PAM 加载、sudoers 解析、setuid 位),是实现安全合规的基础。尤其在等保2.0、金融审计等场景中,需覆盖创建、授权、审计、回收四阶段,并解决如 jetson nano

weixin_30596735的博客 393

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

成人ADHD不是懒:用外部化大脑重建执行功能与任务管理

ADHD(注意缺陷多动障碍)不仅是儿童期问题,大量成人同样受其困扰。其本质是一种神经发育差异,核心症结在于执行功能受损,尤其是工作记忆容量有限,导致任务启动困难、时间感知模糊和注意力过滤失灵。传统“硬逼自己”的策略往往无效,而“外部化大脑”则提供了一条高效路径:将信息、提醒与情绪管理从内部认知负荷中剥离,借助外部工具和环境设计来补偿大脑短板。这种方法广泛应用于时间管理、待办事项处理、物品防丢和情绪调节等日常场景。i-have-adhd项目正是基于这一设计思路,用一页纸清单、最小动作和固定节奏等可执行方法,帮

weixin_42522009的博客 193

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm俄罗斯方块开发实战:从数据结构到游戏循环完整解析

桌面应用开发的核心在于理解UI绘制、事件处理与状态管理的协同机制。通过游戏循环(如定时器驱动)实现状态更新与渲染分离,是构建流畅交互应用的基础原理。这种模式在游戏和工具软件开发中具有广泛的技术价值,能有效管理复杂状态并响应用户输入。以经典游戏俄罗斯方块为例,其实现完美融合了二维网格数据模型、碰撞检测算法和实时渲染技术。本文将深入探讨如何运用C#与GDI+,从零构建一个完整的俄罗斯方块游戏,涵盖游戏区域与方块的数据结构设计、基于定时器的游戏主循环实现,以及键盘控制与行消除等核心功能模块。通过这个项目,开发者不

hqmln的博客 438

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32寄存器级驱动DRV8833双H桥实战:从PWM原理到电机精准控速

H桥驱动是嵌入式电机控制的核心基础,其本质是通过四个开关管的协同导通实现电流方向与能量通断的精确调控;PWM调速并非简单调节平均电压,而是基于电感特性对电流峰值与纹波的时序控制,直接决定转速响应与发热效率;掌握STM32寄存器级配置(如RCC时钟、GPIO模式、TIM定时器ARR/PSC计算)是保障DRV8833稳定工作的技术前提,可规避HAL库抽象导致的时序偏差、资源冗余与跨平台失效问题;该能力广泛应用于直流/步进电机驱动、智能小车、精密泵控等对实时性、体积与可靠性要求严苛的嵌入式场景;本文聚焦F103C

weixin_34021089的博客 400
上一篇: Android 蓝牙连接,蓝牙配对,自动连接蓝牙
下一篇: 进程与线程的基本理解
小狗蛋ing
博客等级 码龄6年 6342粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值