码迷,mamicode.com
首页 > 移动开发 > 详细

Android 计时器Timer用法

时间:2014-09-15 19:57:29      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:android   style   http   color   os   java   2014   sp   问题   

 昨天晚上在写一个Android的计时器,开始认为很容易,用Java一般写法,结果发现计时器根本不能运行,但却不报任何错误,当时就呆在那了,不知道该怎么办了,后来在网上查了一下,Android考虑到线程安全问题,不允许在线程中执行UI线程(我的现在所知道,还有其他的限制发现中),在Android中,有一个很有意思的类:android.os.Handler,这个可以实现各处线程间的消息传递。
先看段代码,这个实例化了一个Handler,Handler可以通过Message在多个线程通讯,我这里做的是定时recLen加1,然后以一定的格式,显示到recTime上(UI线程上的操作)。

bubuko.com,布布扣bubuko.com,布布扣Code
1 final Handler handler = new Handler(){
2 public void handleMessage(Message msg) {
3 switch (msg.what) {
4 case 1:
5 recLen++;
6 recTime.setText(GetRecTime(recLen));
7 break;
8 }
9 super.handleMessage(msg);
10 }
11 };


下面定实例化一个TimerTask,这个是为Timer提供一个定时执行的内容。我在这个方法中加的是给Handler一个发送消息功能,因这在Timer的线程中,无法直接操作UI线程。

bubuko.com,布布扣

1 TimerTask task = new TimerTask(){
2 public void run() {
3 Message message = new Message();
4 message.what = 1;
5 handler.sendMessage(message);
6 }
7 };

bubuko.com,布布扣


剩下的工作就简单多,添加一个Timer,可以让程序运行起来了

1 timer = new Timer(true);
2 timer.schedule(task,1000, 1000); //延时1000ms后执行,1000ms执行一次
3 //timer.cancel(); //退出计时器


说到这里,也许有些还感觉云里雾里,好久没写东西,也不知道怎么把问题说的更明白,这个再贴上我开始的错误写法,对比错误写法,也许能让大家更快的明白过来

bubuko.com,布布扣bubuko.com,布布扣错误写法
1bubuko.com,布布扣bubuko.com,布布扣TimerTask task = new TimerTask()bubuko.com,布布扣{
2bubuko.com,布布扣bubuko.com,布布扣 public void run() bubuko.com,布布扣{
3bubuko.com,布布扣 recLen++;
4bubuko.com,布布扣 recTime.setText(GetRecTime(recLen));//直接在TimerTask中操作UI线程,单步调试的时候发现,程序根本就没执行到这里
5bubuko.com,布布扣 }

6bubuko.com,布布扣}
;
7bubuko.com,布布扣timer = new Timer(true);
8bubuko.com,布布扣timer.schedule(task,1000, 1000);


注:本人也是Android初学者,说的不对的地方欢迎各位指正,很想在这里和大家多多交流,一个学习的过程遇到问题的时候感觉真的很无助。

Android 计时器Timer用法

标签:android   style   http   color   os   java   2014   sp   问题   

原文地址:http://my.oschina.net/yuanxulong/blog/313830

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!