Android定时任务
每隔固定时间,执行重复的规律操作。一般常用刷新UI等操作。
现在一般有一下几种方法:
1:Thread.sleep(int millisecond)
2:Timer及TimerTask相结合。
3:Handler.postDelayed(Runnable, long)
4:MyCountDownTimer(long millisInFuture, long countDownInterval)
具体实现:
1:Thread.sleep(int millisecond)
Thread.sleep是线程的暂停方法,单独可以实现延迟的操作,如果在Runable 接口实现,就可以通过线程的方法多次实现类似于定时任务的操作。
单独实现:
private void runMethod(){
//开始操作
//...
//延迟一秒实现
Thread.sleep(1000);
//后续操作
}
定时任务实现:
1:实现Runable接口
public class MyRunable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) { //这里写判断方法,实现条件
try {
Thread.sleep(10000);// 线程暂停10秒,单位毫秒
//定时操作,以刷新UI为例,用Handle刷新
handler.sendEmptyMessage(0x00);// 发送空消息
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2:Handle实现
private Handler myHandler;//定义Handle全局变量
myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
//具体实现
}
2.Timer及TimerTask相结合
1:新建Time
Timer myTimer = new Timer();
2:新建TimeTask
TimerTask myTimerTask = new TimerTask() {
public synchronized void run() {
}
};
3:Timer .schedule实现定时任务
//TimerTask :需要执行的Task。
//delay :延迟时间
//period 间隔时间
Timer.schedule(TimerTask task, long delay, long period);
myTimer.schedule(myTimerTask,0L,180000);
3:Handler.postDelayed实现
开始需要Handle对象和Runable对象,沿用上面的。
开始启动定时器:
myHandler.postDelayed(Runnable runable, int millisecond);
取消定时器:
myHandler.removeCallbacks(Runnable runnable);
4:CountDownTimer实现
直接新建CountDownTimer(long millisInFuture, long countDownInterval)对象,会继承相应方法,
//一共执行60秒,每1秒执行一次
new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//每次执行任务
//...
}
@Override
public void onFinish() {
//执行结束事件
//...
}
}.start();
各自优缺点:
Thread.sleep()方法结合Runable,需要外部参数判断来控制结束。不能直接通过时间来控制。
Timer及TimerTask 结合的方法功能强大,可以延迟和定时。
Handler.postDelayed,可延迟,定时执行任务。
CountDownTimer只能实现,不可延迟,并且有执行完成的回调方法。