首页 > 其他分享 >Android:倒计时、定时器、定时执行次数使用笔记

Android:倒计时、定时器、定时执行次数使用笔记

时间:2023-07-02 20:36:47浏览次数:44  
标签:定时器 void Timer 倒计时 Override new Android 执行 public

原文:https://blog.csdn.net/weixin_40420578/article/details/103876900

一.倒计时(3、2、1)

  • CountDownTimer()
  1.   //一共3秒,每隔1秒执行一次
  2.   CountDownTimer timer = new CountDownTimer(3000, 1000) {
  3.   @Override
  4.   public void onTick(long millisUntilFinished) {
  5.   //还剩下多少秒millisUntilFinished/1000,依次为2、1、0
  6.    
  7.   }
  8.    
  9.   @Override
  10.   public void onFinish() {//结束后的操作
  11.    
  12.   }
  13.   }.start();

二.定时器

1.Timer:完整定时任务需要由Timer、TimerTask两个类来配合完成。Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。

计算下一次执行时间:当前时间(在任务执行前得到) + 时间片(实际时间)

缺陷:Timer对调度的支持是绝对时间,不会捕获异常,当TimerTask抛出异常导致Timer线程终止,Timer不会恢复,把整个线程取消。内部是单一线程

  • 公共的
  1.   //当前时间往后1分钟,eg:现在11:11:11,那么得到的是11:12:11(举例的是时分秒)
  2.   long currentTime = System.currentTimeMillis() + 1 * 60 * 1000;
  3.   Date date = new Date(currentTime);
  4.    
  5.   Timer timer=new Timer();
  6.    
  7.   timer.cancel();//取消定时器
  • 指定时间执行一次(当前时间1分钟后执行一次)
    1.   timer.schedule(new TimerTask() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },date);
  • 延时执行一次(1秒后执行一次)

    1.   timer.schedule(new TimerTask() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },1000);

     

  • 指定时间开始执行,执行完后等2秒再进行下一次,以此类推一直循环

    1.   timer.schedule(new TimerTask() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },date,2000);
  • 延时1秒后开始执行,执行完后等2秒再进行下一次,以此类推一直循环

    1.   timer.schedule(new TimerTask() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },1000,2000);

     

2.ScheduledExecutorService(推荐使用):是将定时任务与线程池功能结合在了一起,任务是并发执行,互不影响

计算下一次执行的时间:当前需要执行的时间(也就是计算出现在应该执行的时间)+ 时间片

优点:ScheduledExecutorService对调度的支持是相对时间(前一个执行结束后相隔多少秒再执行下一个),内部是个线程池

  • 公共的 
    1.   ScheduledExecutorService service= Executors.newScheduledThreadPool(10);//线程池数
    2.    
    3.   service.shutdown();//取消定时器

     

  • schedule延时执行一次
    1.   service.schedule(new Runnable() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },1, TimeUnit.SECONDS);//TimeUnit.SECONDS是秒,合起来就是1秒后执行一次

     

  •  scheduleAtFixedRate(一秒后开始执行,之后每隔period秒执行一次)                                                                                      参数period:两次开始执行时间
    1.   service.scheduleAtFixedRate(new Runnable() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },1,2, TimeUnit.SECONDS);

     

  • scheduleWithFixedDelay(一秒后开始执行,之后每隔delay秒执行一次)                                                                                 参数delay:前一次执行结束到下一次执行开始的间隔时间
    1.   service.scheduleWithFixedDelay(new Runnable() {
    2.   @Override
    3.   public void run() {
    4.   //要做的事情M
    5.   }
    6.   },1,2, TimeUnit.SECONDS);

     

三.定时执行次数(eg:每隔1秒执行一次共3次)

  1.   private int count = 0;
  2.   private Handler handler = new android.os.Handler();
  3.   Runnable runnable = new Runnable() {
  4.   @Override
  5.   public void run() {
  6.   //要做的事情 M
  7.   …………………………………………
  8.   //为什么是>=2,因为count为0时执行一次M,1时执行一次M,2时执行一次M,然后移除,不再执行(共执行3次M)
  9.   if (count >= 2) {
  10.   handler.removeCallbacks(this);//删除指定Runnable ,停止运行
  11.   } else {
  12.   handler.postDelayed(this, 1000);//一秒后执行
  13.   count++;
  14.   }
  15.   }
  16.   };
  17.    
  18.   handler.post(runnable);//启动定时器

标签:定时器,void,Timer,倒计时,Override,new,Android,执行,public
From: https://www.cnblogs.com/bluestorm/p/17521317.html

相关文章

  • Android信任证书,把用户级别放入系统级别
    三、操作步骤1、在Windows安装openssl,用来把证书转成.pem 格式1)下载和安装下载其他人做的便捷版安装包:http://slproweb.com/products/Win32OpenSSL.html    2)配置path环境变量   2、把证书转成.pem 格式(如果本身就是这个格式就不转了)......
  • 使用ADB轻松管理Android设备的调试和应用管理
    AndroidDebugBridge(ADB)是一个强大的命令行工具,可用于管理和调试Android设备。1.ADBWiFi调试ADBWiFi调试允许您通过无线网络连接进行设备调试,而无需使用USB连接。以下是进行ADBWiFi调试的步骤:确保您的Android设备与计算机连接在同一网络下。通过USB将设备与计算机连接,并确......
  • Android面经:小厂被diss到自闭,“试水”大厂竟收3份offer
    写在最前面:有时候某人的放弃,将会成就你更好的选择!刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作,还是真的是像网上所焦虑的那样,Android开发真的是要凉了?这次跳槽经历让我明白,工作本身就是双向选择,一家不行再换一家,总有合适的,千万不......
  • 3588 编译android12 过程中的报错。
     怀疑是当初解压的时候使用的是sudo.   ......
  • 一个高效的Android终端日志过滤工具
    什么是pidcat在Android日常开发中,对日志过滤是很有必要的,但是我们在终端过滤日志的时候因为日志信息过多而看的眼花缭乱,而且很多时候,我们只想过滤我们自己应用进程的日志,但是当我们的进程重启后,pid就变了,这时又需要重新获取进程pid,然后过滤,如果我们想看两个或多个进程的日志就更麻......
  • 倒计时
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><div><inputtype="number"placeholder="请输入时间">分钟&l......
  • Android 构建脚本从Groovy迁移到Kotlin DSL
    原文:https://edenxio.github.io/2019/02/01/Android%20%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC%E4%BB%8EGroovy%E8%BF%81%E7%A7%BB%E5%88%B0Kotlin%20DSL/ 为什么要迁移?因为Groovy是动态语言,在用作Android构建脚本的时候,经常有些问题:很差的IDE支持(自动提示等)性能问题......
  • 2023年字节阿里等大厂Android岗秋招(校招)它来了,行情预测和面试题汇总
    写在前面前段时间的金三银四相信大家的找工作和面试,有的人从里面收获了心仪的offer;有的人走了一趟,收获寥寥,不甚满意;还有的人在观望,等待下一个良机。那么6月份快过去了,秋招它要来了!!!6.12,科大讯飞“飞行计划”正式启动,整整提前了1个星期!6.14,麦肯锡2024秋招全面启动,比去年提前了半......
  • 【备战金九银十】分享2023 Android中高级面试题大全
    都说今年互联网行情很差,Android行情更差。但到底怎么样呢,不能光听别人说,而要自己走出去看一看。还有两个月就要到金九银十了,那么如何准备即将来临的面试热潮呢?运筹帷幄之后,决胜千里之外!小编从来不打没有准备的战,不管是笔试还是面试都是有章可循的!!面试题,注意看!!非常重要!!对于程序员来......
  • 【Android Kotlin】全网最全的Android Kotlin入门教程指南,入股不亏
    前言2017年的谷歌大会上,Kotlin被指定为官方的Android开发语言,从长远的角度来看,Kotlin语言是作为Android开发者必须要掌握的一门编程语言。Kotlin编程语言极易上手,而且它不像Java那样代码繁琐,Kotlin代码更简洁,可读性也更强,可以花更少的时间来编写和理解代码,极大地提高了工作效率,不仅......