您的位置:首页 > 移动开发 > Android开发

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

2013-08-20 11:13 471 查看
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">
















                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: