Android Handler和Thread实例及Timer()延时
2013-08-20 11:13
471 查看
Android对UI的处理需要放在Activity主线程去处理,因此对UI的操作不能在新建的Thread中处理
因此,采用Handler机制实现,以更新当前时间为例:
1,采用Thread方式处理
首先新建Handler:
然后,新建用于处理时间的线程
注意:线程的停止可以通过设置Running 标志位来实现
2,采用Timer定时器方式处理
3,Timer函数参数解释
4,Timer的schedule和scheduleAtFixedRate的区别
因此,采用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">
相关文章推荐
- Android 不可缺少的异步(Thread、Handler、AsyncTask)实例解析(在独立线程中进行地理位置编码)
- Java 两种延时thread和timer详解及实例代码
- android 定时器(Handler Timer Thread AlarmManager CountDownTimer)
- 实例分析Android中HandlerThread线程用法
- 关于 Android Handler 跟 Thread 通信交互的小实例,配备了 Demo 供初学/新手小伙伴参考
- android 待机 handler timer thread 都会停止运行
- Android基本之Thread,Handler, Timer
- KING_C#学习之Thread和Timer实现延时用法(附自动切换窗体实例)
- android thread handler timertask
- Android 更新UI的两种方法——handler和runOnUiThread()
- Android中的Handler, Looper, MessageQueue和Thread
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Android 中Message,MessageQueue,Looper,Handler详解+实例
- Android使用自己封装的Http和Thread、Handler实现异步任务
- Android Thread,Handler,Loop用法介绍
- Android单线程模型中Message、Handler、Message Queue、Looper之间的关系---附实例源码
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android HandlerThread 完全解析
- Android中Handler Runnable与Thread的区别详解
- Android消息处理机制-Looper、Handler、Thread