用线程实现定时器功能
来源:互联网 发布:比特币源码编译成exe 编辑:程序博客网 时间:2024/05/16 15:22
最近在写一个秒表,发现android自带的chronometer不太准,所以自己写了个定时器,用线程来实现,其中遇到了不少问题,最后还是实现了。
要使用线程Thread必须实现Runnable,并且要用handler来处理线程发来的消息
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
public class MyTimer {
private int mHour = 0;
private int mMinute = 0;
private int mSecond = 0;
private int mMillions = 0;
private boolean THREAD_CONTINUE = true;
private long millisA;// 第一次获得系统时间
private long millis;// 系统时间差
private long delt;// 暂停时,经过的时间差
/*
*处理线程发来的消息,每10毫秒保存一次时间差
/*@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
millis = System.currentTimeMillis() - millisA;
}
}
};
public long getMillis() {
return millis;
}
public int getmHour() {
mHour = (int) (millis / 3600000);
return mHour;
}
public void setmHour(int mHour) {
this.mHour = mHour;
}
public int getmMinute() {
mMinute = (int) ((millis / 60000) % 60);
return mMinute;
}
public void setmMinute(int mMinute) {
this.mMinute = mMinute;
}
public int getmSecond() {
mSecond = (int) ((millis / 1000) % 60);
return mSecond;
}
public void setmSecond(int mSecond) {
this.mSecond = mSecond;
}
public int getmMillions() {
mMillions = (int) (millis % 1000);
return mMillions;
}
public void setmMillions(int mMillions) {
this.mMillions = mMillions;
}
public MyTimer() {
// TODO Auto-generated constructor stub
}
/**
* 开始计时
*/
public void startCount() {
THREAD_CONTINUE = true;
// 计算时间
millisA = System.currentTimeMillis();
mRunnable runnable = new mRunnable();
Thread mThread1 = new Thread(runnable);
mThread1.start();
}
/**
* 当按下stop时,如果再按下start,则继续计时
*/
public void continueCount() {
THREAD_CONTINUE = true;
mRunnable runnable = new mRunnable();
Thread mThread2 = new Thread(runnable);
mThread2.start();
millisA = System.currentTimeMillis() - delt;// 此时,millisA是一个时刻,重新计时的时刻
}
/**
* 暂停计时
*/
public void pauseCount() {
delt = System.currentTimeMillis() - millisA;// 从第一次start到stop经过的时间差,为continueCount准备;
THREAD_CONTINUE = false;
}
/**
* 停止计时,清空时间
*
* @author Gao
*
*/
public void stopCount() {
THREAD_CONTINUE = false;
mHour = 0;
mMinute = 0;
mSecond = 0;
mMillions = 0;
millis = 0;
}
public class mRunnable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (THREAD_CONTINUE) {
try {
Thread.sleep(1);
Message message = Message.obtain();
message.what = 1;
mHandler.sendMessage(message);
// }
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
- 用线程实现定时器功能
- 用PHP实现定时器功能
- 用PHP实现定时器功能
- java用线程实现定时器
- android 中native层使用线程实现定时器功能
- 用Spring framework实现定时器功能
- 用Spring framework实现定时器功能
- 用Spring framework实现定时器功能
- 用linux系统API实现定时器功能
- 用定时器实现简单时钟功能
- Servlet 实现定时器功能
- QuartzJobBean实现定时器功能
- 定时器实现定时功能
- spring实现定时器功能
- 用线程实现简单的定时器
- JAVA实现定时器功能详解
- Linux下实现定时器功能
- 全局定时器 实现闹钟功能
- 自定义定时器
- linux给用户添加sudo权限
- 脚本引发的思考
- 2条完全一样的数据删除一条保留一条,用SQL语句删除。
- 基于STK的空间站星载GPS接收机仿真分析
- 用线程实现定时器功能
- 第十周上机实践 求1/3-3/5+5/7-7/9......-19/21
- Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置
- H.264 NAL层解析(0x00000001,编码,打包,NALU)
- <Pointers on C> Chapter 2
- sar 查看看qps 和rt
- I,P,B帧和PTS,DTS的关系,GOP相关
- java中String.getBytes()
- 字符设备驱动