Android 计时器使用
2015-07-11 17:47
561 查看
Android实现定时器3种方式,现将三种方式写在一个类里,对比参考:
另还有系统倒计时CountDownTimer类,此类可实现倒计时功能,并在固定间隔收到通知。
其中OnTick的调用是同步的,即前一次调用处理完了才有可能处理下一次调用。如果处理时间超过OnTick间隔,会漏掉OnTick通知。
/** * @author huihui 三种计时器 */ public abstract class MyTimer { private int count = 0; // 计时器执行次数 private int type = 1; // 1表示handle+Thread,2表示handle的postdelay,3表示TimeTask private int duration = 0; // 计时器时间间隔 private boolean flg1 = false; // 计时器1标记 private Timer timer; Handler myHandler; public abstract void onTick(); public MyTimer() { count = 0; myHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0x123: count++; onTick(); break; default: break; } } }; } public int getCount() { return count; } public void start(int type, int duration) { stop(); count = 0; this.type = type; this.duration = duration; switch (type) { case 1: // 启动计时器1 flg1 = true; new Thread(new MyThread()).start(); break; case 2: myHandler.postDelayed(runnable, duration); break; case 3: timer = new Timer(); /** * 第三种计时器方式, timerTask */ TimerTask task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub myHandler.sendEmptyMessage(0x123); } }; timer.schedule(task, duration, duration); break; default: break; } } public void stop() { // 停止计时器 flg1 = false; switch (type) { case 2: myHandler.removeCallbacks(runnable); break; case 3: timer.cancel(); break; default: break; } } /** * 第二种计时器方式 handle postdelay */ private Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub myHandler.postDelayed(this, duration); count++; onTick(); } }; /** * @author huihui 第一种计时器方式, handle+thread */ class MyThread implements Runnable { @Override public void run() { while (flg1) { try { Thread.sleep(duration); myHandler.sendEmptyMessage(0x123); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
另还有系统倒计时CountDownTimer类,此类可实现倒计时功能,并在固定间隔收到通知。
CountDownTimer countDownTimer = new CountDownTimer() { @Override public void onTick(long millisUntilFinished) { // TODO Auto-generated method stub } @Override public void onFinish() { // TODO Auto-generated method stub } };
其中OnTick的调用是同步的,即前一次调用处理完了才有可能处理下一次调用。如果处理时间超过OnTick间隔,会漏掉OnTick通知。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories