Android实现定时器的三种方法及详解

本文详细介绍了在Android中实现定时任务的三种方式:通过新建Thread并使用sleep()方法进行延时,利用Handler的postDelayed()方法,以及设置Timer及TimerTask来定时执行任务。这三种方法各有特点,适用于不同的场景。
摘要由CSDN通过智能技术生成
  • 新建一个Thread,使用sleep()延时
new Thread(){
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		// Use while to run consistently, use if to run once.
		while (true) {
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			doSomething(); //TODO Something
		}
	}
}.start();
  • 使用Handler的postDelayed()的方法
Handler handler = new Handler();
Runnable runnable=new Runnable() {
	@Override
	public void run() {
		doSomething(); //TODO Something
		handler.postDelayed(this,  5 * 1000); //Put the statment here to run consistently, remove it to run once 
	}
};

handler.postDelayed(runnable,  5 * 1000); //Start Timer
Handler的postDelayed(Runnable r, long delay Millis)方法与postAtTime(Runnable r, long uptimeMillis)方法的区别:
postDelayed是在延迟x秒后执行执行操作, postAtTime是在特定的时间XX:YY:ZZ.mmm进行执行操作。

注意事项:
一般会使用如下代码进行handler的取消:
handler.removeCallbacks(runnable); //Stop Timer
但是当某些特定的时候,removeCallbacks()可能会失效。例如当Activity转入后台再转入前台之后,再调用removeCallbacks()方法,会发现runnable无法正确地从队列中被移除。原因是当Activity转入后台后,runnable仍旧在运行,但当Activity重新转入前台后,会重新定义Runnable runnable。因此之前在运行的runnable无法被正确移除。
解决方法是将handler和runnable定义成静态的,JVM只会为静态变量分配一次内存。
static Handler handler = new Handler();  
static Runnable runnable = new Runnable() {  
      
    @Override  
    public void run() {  
        @Override
		public void run() {
			doSomething(); //TODO Something
			handler.postDelayed(this,  5 * 1000); //Put the statment here to run consistently, remove it to run once 
		}
    }  
};  
  • 设置Timer及TimerTask
private final Timer timer = new Timer(); 
private TimerTask task; 

task = new TimerTask() { 
    @Override 
    public void run() { 
        doSomething(); //TODO Something
    } 
}; 

timer.schedule(task, 5 * 1000, 5 * 1000); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值