java 的定时触发大致有两种思路,一个时获取系统时间与当前时间做对比,完成对时间的控制; 一个使用类似定时器的方法实现规定时间的调用; 因项目需要,在这自己记录下
一, 系统时间
long begintime = System.currentTimeMillis();
//运算代码
long endtinme=System.currentTimeMillis();
long costTime = (endtime - begintime);
long begintime = System.nanoTime();
//运算代码
long endtime = System.nanoTime();
long costTime = (endtime - begintime)/1000; //要换算为微秒,就除上1000,就可以
我没有使用这种方法,原因是需要配合再写一份逻辑;
二, 类似定时器方法 java的三种延时机制
2.1 使用线程的休眠实现延时操作
new Thread(new Runnable() {
@Override
public void run() {
Thread.sleep(1000); // 休眠1秒
/**
* 延时执行的代码
*/
}
}).start();
2.2 使用TimerTask实现延时操作
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
/**
* 延时执行的代码
*/
}
},1000); // 延时1秒
2.3 使用Handler的postDelayed()方法实现延时操作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
/**
* 延时执行的代码
*/
}
},1000); // 延时1秒
在Android 开发中建议使用 postDelayed的方法, 该方法为主UI线程创建的,所以可以对UI控件进行操作,即可以控制视图;
另外两种是自己的线程,要完成功能需要配合再写一份通讯机制,抛弃;
handle.postDelayed(Runnable,Long)
postDelayed 延时有个问题要注意,在取消计时的时候要明确对象;
也就是网上说的 handle.removeCallbacks(Runnable) 失效的问题;
内容机制 详见
// 声明
static Runnable runnable;
static Handler handler = new Handler();
//初始化
runnable = new Runnable() {
@Override
public void run() {
// 逻辑处理
}
};
//调用
handler.postDelayed(runnable,120000); //120s
handler.removeCallbacks(runnable);