为什么80%的码农都做不了架构师?>>>   


一、应用于发送验证码的倒计时

1.使用高级控件:Chronometer

初始化,并实现ChronometerTickListener接口

chronometer1 = (Chronometer) findViewById(R.id.chronometer1);
chronometer1.setOnChronometerTickListener(this);

点击按钮“发送验证码”,触发Chronometer的计时

chronometer1.start();

注意,要在activity的onDestroy()方法中停止计时器

@Overrideprotected void onDestroy() {super.onDestroy();chronometer1.stop();}

关键代码,如下:

@Overridepublic void onChronometerTick(Chronometer chronometer) {if (timeLeftInS <= 0) {chronometer1.stop();button_sendcode.setText("发送验证码");button_sendcode.setEnabled(true);button_sendcode.setSelected(false);button_sendcode.setBackgroundResource(R.drawable.selector_btn);textSwitcher_sendcode.setText("发送验证码");textSwitcher_sendcode.setEnabled(true);textSwitcher_sendcode.setSelected(false);textSwitcher_sendcode.setBackgroundResource(R.drawable.selector_btn);timeLeftInS = 60;return;}button_sendcode.setText("(" + timeLeftInS + ")s");textSwitcher_sendcode.setText("(" + timeLeftInS + ")s");timeLeftInS--;}

2.使用CountdownTimer类

构造函数
         public CountDownTimer (long millisInFuture, long countDownInterval)
        参数  millisInFuture  从开始调用start()到倒计时完成并onFinish()方法被调用的毫秒数。(译者注:倒计时时间,单位毫秒) countDownInterval  接收onTick(long)回调的间隔时间。(译者注:单位毫秒)

公共方法
public final void cancel ()          取消倒计时(译者:取消后,再次启动会重新开始倒计时)               
public abstract void onFinish ()          倒计时完成时被调用     
public abstract void onTick (long millisUntilFinished)          固定间隔被调用

参数  millisUntilFinished   倒计时剩余时间。
public synchronized final CountDownTimer start ()

private CountDownTimer timer = new CountDownTimer(10000, 1000) {@Overridepublic void onTick(long millisUntilFinished) {vertifyView.setText((millisUntilFinished / 1000) + "秒后可重发");}@Overridepublic void onFinish() {vertifyView.setEnabled(true);vertifyView.setText("获取验证码");}};

前面两种方法基本上都是较短时间的计时,小范围使用,最近用到的一个计时需求是:程序后台运行10分钟后注销账号,用到的是android提供的闹钟管理器-AlarmManager

3.AlarmManager结合BroadCastReceiver

AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作

AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.

下面的代码详细的介绍了两种定时方式的使用:

(1)在指定时长后执行某项

//操作:发送一个广播,广播接收后Toast提示定时操作完成      Intent intent =new Intent(Main.this, alarmreceiver.class);intent.setAction("short");PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);//设定一个五秒后的时间Calendar calendar=Calendar.getInstance();calendar.setTimeInMillis(System.currentTimeMillis());calendar.add(Calendar.SECOND, 5);AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);//或者以下面方式简化//alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);Toast.makeText(Main.this, "五秒后alarm开启", Toast.LENGTH_LONG).show();

(2)在manifest.xml种注册,并用广播接受

 public static class alarmreceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubif(intent.getAction().equals("short")){Toast.makeText(context, "short alarm", Toast.LENGTH_LONG).show();}else{Toast.makeText(context, "repeating alarm",                       Toast.LENGTH_LONG).show();}}}

(3)周期性的执行某项操作

Intent intent =new Intent(Main.this, alarmreceiver.class);intent.setAction("repeating");PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);//开始时间long firstime=SystemClock.elapsedRealtime();AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);  //5秒一个周期,不停的发送广播am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, 5*1000, sender);

AlarmManager的setRepeating()相当于Timer的Schedule(task,delay,peroid);有点差异的地方时Timer这个方法是指定延迟多长时间

以后开始周期性的执行task;

(4)AlarmManager的取消:

(其中需要注意的是取消的Intent必须与启动Intent保持绝对一致才能支持取消AlarmManager)

Intent intent =new Intent(Main.this, alarmreceiver.class);intent.setAction("repeating");PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);alarm.cancel(sender);

转载于:https://my.oschina.net/Gxhpro/blog/369271

android实现计时器相关推荐

  1. 倒计时 时间校准android,android倒计时器时间

    我一直在使用 android倒计时器样本来创建某个日期的倒计时. Time TimerSet = new Time(); TimerSet.set(20, 8, 2012); //day month ...

  2. Android Wear计时器开发

    记得在2013年12月的时候,有系列文章是介绍怎么开发一个智能手表的App,让用户可以在足球比赛中记录停表时间.随着Android Wear的问世,在可穿戴设备中开发一款这样的App确实是个很不错的想 ...

  3. Android Studio计时器的简单使用

    Android Studio计时器的简单使用 前言 一.计时操作 1.后台代码展示 2.代码解释 二.源码 总结 前言 唉 本菜鸡又要来献丑了.没办法,为了得到你们的赞,我要更努力才行.好了,开始献丑 ...

  4. Android实现计时器功能

    使用Handler和线程来实现计时器功能 1.xml布局 在drawable中添加yuan.xml如下 <?xml version="1.0" encoding=" ...

  5. 时间计时android程序,Android 时间计时器控件 Chronometer

    当你想要显示时间的推移而不是进程的增加的时候,可以使用Chronometer作为一个计时器.当需要记录用户进行某项操作所消耗的时间的时候,或者在游戏中需要限制时间时候,它将非常实用. 这里,Chron ...

  6. android——沙漏计时器

    原创文章,转载注明 先看一下效果图吧 这里说一下关键的思路,所有的细节都说到太麻烦了. 1.沙漏的绘制 上下两边的绘制,用二阶贝塞尔曲线,先确定左端点,即可获得对称的右端点,上边中间控制点为(屏幕x/ ...

  7. android倒数计时器,Android倒计时(分钟)

    本文通过CountDownTimer来实现倒计时的功能,先上效果图 效果图.gif 1.核心方法就是通过onTick方法来获取时间的改变 public void onTick(long millisU ...

  8. Android简单计时器

    本文利用ContextMenu(上下文菜单),Chronometer实现简单计数器. Main.xml: <?xml version="1.0" encoding=" ...

  9. Android简单计时器详解(Timer)

    Android计时器详解(Timer) 在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Tim ...

最新文章

  1. 数据采集框架Gobblin简介
  2. spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析
  3. vb.net2019- 对象 (Visual Basic)
  4. FineReport单行与数据库交互的方法
  5. (数据科学学习手札03)Python与R在随机数生成上的异同
  6. ZJU期末考试记录(研究生)——数据挖掘
  7. python 贪吃蛇大作战_python实现简单贪吃蛇游戏
  8. 蓝翔改名变成“技院”了?网友评论炸了:我真的没想歪...
  9. 使用sourcetree 的git flow
  10. 190226每日一句
  11. labview 判断整数_labview教程——如何判断字符串包含的是数字
  12. Python初学者必刷的五个项目,你做过几个?
  13. mysql过期数据_mysql过期数据如何删除
  14. MyBatis学习(一)-- 实现简单查询
  15. 怎么在pdf上编辑文字内容
  16. 简单的HANGMAN游戏
  17. 第四章第八节数据资产盘点-系统数据梳理
  18. STM32学习笔记(三)——外部中断的使用 1
  19. 熊谱翔:变化的RT-Thread 不变的初心
  20. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划

热门文章

  1. 解决ActionBar中的不显示View控件
  2. 结构型模式—外观模式
  3. java代码简单操作Redis数据Jedis jar
  4. Unity的Flutter——UIWidgets简介及入门
  5. 【算法】BitMap
  6. Core-3399-JD4 六核高性能AI核心板
  7. C#中静态方法和非静态方法的区别
  8. 链接脚本使用----- 将二进制文件作为一个段
  9. DevExpress 中 在做全选的全消功能的时候 加快效率
  10. U盘的挂载和卸载(也可以查看指令篇)