一. 采用Handler的postDelayed(Runnable, long)方法(最简单的android实现)
二. 采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用)
下面逐个介绍:
第一种方法: 采用Handler的postDelayed(Runnable, long)方法
/**
* Handler可以用来更新UI
* */
private Handler mHanlder = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
Date currentDate = new Date();
String displayTime1 = format1.format(currentDate);
txtShow.setText(displayTime1);
break;
default:
break;
}
super.handleMessage(msg);
}
};
private Runnable task = new Runnable() {
@Override
public void run() {
/**
* 此处执行任务
* */
mHanlder.sendEmptyMessage(1);
mHanlder.postDelayed(this, 5 * 1000);//延迟5秒,再次执行task本身,实现了循环的效果
}
};
调用下面的代码可以触发开始执行任务:
mHanlder.postDelayed(task, 1000);//第一次调用,延迟1秒执行task
停止执行任务:
mHanlder.removeCallbacks(task);
第二种方法:采用Handler与timer及TimerTask结合的方法
1 . 定义定时器
private final Timer timer = new Timer();
2 . 定义Handler,用于更新UI
private Handler mHanlder = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
Date currentDate = new Date();
String displayTime1 = format1.format(currentDate);
txtShow.setText(displayTime1);
break;
default:
break;
}
super.handleMessage(msg);
}
};
3 . 定义并初始化定时器任务
/**
* 定义并初始化定时器任务
* */
private TimerTask timerTask = new TimerTask() {
@Override
public void run() {
/**
* 此处执行任务
* */
mHanlder.sendEmptyMessage(1);//通知UI更新
}
};
4 . 开始执行任务
timer.schedule(timerTask,
5 * 1000,//延迟5秒执行
1000);//周期为1秒
5 . 取消执行任务
timer.cancel();
demo 工程源代码:https://github.com/YoungBear/AndroidUI
参考:http://blog.youkuaiyun.com/fancsxx/article/details/8811565