三种计时器的用法
来源:互联网 发布:sopcast网络电视官网 编辑:程序博客网 时间:2024/05/17 04:36
Android开发中,经常会遇到倒计时功能,比如发送了验证码之后等待多少秒才能再次发送,最近由于遇到了这种问题,在此总结一下三种常用计时器的方法。
1.CountDownTimer
这个类是一个抽象类,必须要实现内部的抽象方法,该继承的类中通常是存在某个类的内部类中。该类主要功能就是可以我们自己设置倒计时的秒数和时间间隔,且只有一个构造方法,构造函数为
public CountDownTimer(long millisInFuture, long countDownInterval) { mMillisInFuture = millisInFuture; mCountdownInterval = countDownInterval; }需要传两个参数,第一个就是我们需要设置的倒计时的总时间,第二个参数是设置倒计时的时间间隔。
除了这个构造方法外,还需要实现两个方法,public void onTick(long millisUntilFinished) 和public void onFinish();
public void onTick(long millisUntilFinished) 是显示计时过程中触发 public void onFinish() 是计时完毕后触发
接下来看看部分代码
private class MyCountDownTimer extends CountDownTimer{ public MyCountDownTimer(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long millisUntilFinished) { mSendButton.setClickable(false); mSendButton.setText("重新获取"+ millisUntilFinished/1000 + "秒后"); } @Override public void onFinish() { mSendButton.setText("重新获取验证码"); mSendButton.setClickable(true); } }最后在要实现的地方new MyCountDownTimer.start(); 一定记得要start();
与此同时 对应还有 new MyCountDownTimer.cancel(); cancel()方法来实现终止计时器。
2.Timer
这个类功能也是用于计时的,而且是线程安全的,创建这个类直接new出来就可以, Timer mTimer = new Timer();
timer.schedule(task,when);第一个参数就是需要传入一个TimerTask对象,该对象实现了Runnable接口,简单的说就是一个线程对象,就是开一个线程来执行run()方法中的代码的。第二个参数传入的类型是Date类型,意思就是定时一样,这个run()方法中的代码在什么时候执行。
mTimer.schedule(task, delay);这个方法的第一个参数和上面的一样。第二个参数就是一个long类型的数据,意思就是延迟多少时间执行run()方法中的代码,单位为毫秒。
直接看看怎么用吧
Timer m = new Timer(); m.schedule(new TimerTask() { @Override public void run() { } },1000);表示延迟1s执行run里面的方法
要注意的是计时器中创建的线程不是主线程,而是创建了一个子线程,因为子线程中不能直接更新UI,故在run方法中不能执行有关更新主界面UI的代码,如果要更新UI,那必须用消息处理器Handler来处理,在run中发送一个消息给消息队列。
3.new Handler().postDelayed()
该方法原理就是在主线程中创建一个Handler消息处理器,然后利用其中的一个postDelayed(Runnable r, long delayMillis)方法,该方法第一个参数需要传入一个Runnable接口,并实现run()方法,第二个参数就是延迟多少时间将run()方法中的代码通过一个消息发送给消息队列,然后在主线程中执行这个消息中的代码,即是run方法中的代码,从而实现在主线程中更新界面UI。
new Handler().postDelayed(new Runnable() { @Override public void run() { } },1000);也就是在主线程中开启一个Handler处理器,并在3s后执行更新UI.
阅读全文
0 0
- 三种计时器的用法
- ASP.NET中的三种Timer(计时器)的区别和用法
- java计时器的几种用法
- Android计时器的三种实现方法
- c# 计时器的三种使用方法
- 8.2 使用计时器的三种方法
- 8.2 使用计时器的三种方法
- C# 计时器的三种使用方法
- C#计时器的三种实现方法
- C# 计时器的三种使用方法
- c#三种计时器
- 三种计时器
- Java中计时器的用法
- Flash Timer的用法 计时器
- Android 计时器的简单用法
- C#中计时器Timer的三种使用方法
- Android中使用计时器的三种方式
- android 计时器的三种实现(Chronometer、Timer、handler)
- OpenCV Error: Unspecifiederror 解决
- Linux 运维面试笔试
- 微信小程序---蓝牙连接开发总结
- c#数据类型
- FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
- 三种计时器的用法
- 泛洪路由协议
- Maven pom.xml与settings.xml详解
- spark学习-22-Spark算子Transformations和Action使用大全(Transformations章(一))
- PIL2Numpy:通过PIL和numpy数据格式互相转换来调用PIL/cv2
- Hbase操作shell和API
- JNI实现源码分析【二 数据结构】
- SpringMVC之视图解析器(ViewResolver)
- BZOJ2460: [BeiJing2011]元素