android实现计时器
为什么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实现计时器相关推荐
- 倒计时 时间校准android,android倒计时器时间
我一直在使用 android倒计时器样本来创建某个日期的倒计时. Time TimerSet = new Time(); TimerSet.set(20, 8, 2012); //day month ...
- Android Wear计时器开发
记得在2013年12月的时候,有系列文章是介绍怎么开发一个智能手表的App,让用户可以在足球比赛中记录停表时间.随着Android Wear的问世,在可穿戴设备中开发一款这样的App确实是个很不错的想 ...
- Android Studio计时器的简单使用
Android Studio计时器的简单使用 前言 一.计时操作 1.后台代码展示 2.代码解释 二.源码 总结 前言 唉 本菜鸡又要来献丑了.没办法,为了得到你们的赞,我要更努力才行.好了,开始献丑 ...
- Android实现计时器功能
使用Handler和线程来实现计时器功能 1.xml布局 在drawable中添加yuan.xml如下 <?xml version="1.0" encoding=" ...
- 时间计时android程序,Android 时间计时器控件 Chronometer
当你想要显示时间的推移而不是进程的增加的时候,可以使用Chronometer作为一个计时器.当需要记录用户进行某项操作所消耗的时间的时候,或者在游戏中需要限制时间时候,它将非常实用. 这里,Chron ...
- android——沙漏计时器
原创文章,转载注明 先看一下效果图吧 这里说一下关键的思路,所有的细节都说到太麻烦了. 1.沙漏的绘制 上下两边的绘制,用二阶贝塞尔曲线,先确定左端点,即可获得对称的右端点,上边中间控制点为(屏幕x/ ...
- android倒数计时器,Android倒计时(分钟)
本文通过CountDownTimer来实现倒计时的功能,先上效果图 效果图.gif 1.核心方法就是通过onTick方法来获取时间的改变 public void onTick(long millisU ...
- Android简单计时器
本文利用ContextMenu(上下文菜单),Chronometer实现简单计数器. Main.xml: <?xml version="1.0" encoding=" ...
- Android简单计时器详解(Timer)
Android计时器详解(Timer) 在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Tim ...
最新文章
- 数据采集框架Gobblin简介
- spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析
- vb.net2019- 对象 (Visual Basic)
- FineReport单行与数据库交互的方法
- (数据科学学习手札03)Python与R在随机数生成上的异同
- ZJU期末考试记录(研究生)——数据挖掘
- python 贪吃蛇大作战_python实现简单贪吃蛇游戏
- 蓝翔改名变成“技院”了?网友评论炸了:我真的没想歪...
- 使用sourcetree 的git flow
- 190226每日一句
- labview 判断整数_labview教程——如何判断字符串包含的是数字
- Python初学者必刷的五个项目,你做过几个?
- mysql过期数据_mysql过期数据如何删除
- MyBatis学习(一)-- 实现简单查询
- 怎么在pdf上编辑文字内容
- 简单的HANGMAN游戏
- 第四章第八节数据资产盘点-系统数据梳理
- STM32学习笔记(三)——外部中断的使用 1
- 熊谱翔:变化的RT-Thread 不变的初心
- [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划