Android Handler和Thread实例及Timer()延时

Android对UI的处理需要放在Activity主线程去处理,因此对UI的操作不能在新建的Thread中处理

因此,采用Handler机制实现,以更新当前时间为例:

1,采用Thread方式处理

首先新建Handler:

Handler m_handler;
static final int m_what = 100000;
m_handler=new Handler(){
	@Override
	public void handleMessage(Message msg) {
	// TODO Auto-generated method stub
	switch (msg.what)
	{
		case m_what:
			setTitle(m_hour+":"+m_minute+":"+m_second);
		break;
	}
    }
};

然后,新建用于处理时间的线程

Thread thread=new LooperThread();
thread.start();
boolean Running  = true;
class LooperThread extends Thread 
{
	@Overridepublic void run() 
	{
	while (Running) 
	{
		Calendar calendar = Calendar.getInstance();
		m_hour = calendar.getTime().getHours();
		m_minute =calendar.getTime().getMinutes();
		m_second = calendar.getTime().getSeconds();
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Message m = new Message();
		m.what = m_what;
		m_handler.sendMessage(m);
		}
	}
}
通过Handler即可达到更新时间的目的。
注意:线程的停止可以通过设置Running 标志位来实现

2,采用Timer定时器方式处理

Timer timer=new Timer();
//timer.scheduleAtFixedRate(new TimerTask(),1,100);
timer.schedule(new TimerTask(),1,100);
class TimerTask extends TimerTask
 {
	@Override
	public void run() 
	{
		// TODO Auto-generated method stub
		Calendar calendar = Calendar.getInstance();
		m_hour = calendar.getTime().getHours();
		m_minute =calendar.getTime().getMinutes();
		m_second = calendar.getTime().getSeconds();
		Message m = new Message();		
		m.what = HandlerActivity.this.m_what;
		m_handler.sendMessage(m);
	}
}


3,Timer函数参数解释

Timer timer = new Timer();
//在1秒之后执行TimerTask的任务
timer.schedule(new TimerTask(),1*1000);
//在Date指定的特定时刻之后执行TimerTask的任务Date d = new Date(System.currentTimeMillis()+1000);
timer.schedule(new TimerTask(),d);
//在Date指定的特定时刻之后,每隔1秒执行TimerTask的任务一次Date d = new Date(System.currentTimeMillis()+1000);
timer.schedule(new TimerTask(),d,1*1000);
//在1秒之后,每隔1秒执行TimerTask的任务一次
timer.schedule(new TimerTask(),1*1000,1*1000);
//在2秒之后,绝对每隔1秒执行TimerTask的任务一次
timer.scheduleAtFixedRate(new TimerTask(),2*1000,1*1000);


4,Timer的schedule和scheduleAtFixedRate的区别

schedule()注重保持间隔时间的稳定。下一次的执行时间点=上一次程序执行完成的时间点+间隔时间
scheduleAtFixedRate()注重保持执行频率的稳定。下一次的执行时间点=上一次程序开始执行的时间点+间隔时间,需要考虑线程同步
</pre><pre code_snippet_id="233452" snippet_file_name="blog_20140313_5_4681705" name="code" class="java"><pre code_snippet_id="233452" snippet_file_name="blog_20140313_5_4681705" name="code" class="java"><pre code_snippet_id="233452" snippet_file_name="blog_20140313_5_4681705">
 
 
 
 
 
 
 
 
 
 
 
 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值