Timer更新UI的方法

文章转载至http://my.oschina.net/u/1463230/blog/278780

Timer更新UI的方法。

 

错误写法:

[java]     view plain  copy
<EMBED id=ZeroClipboardMovie_1 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
  1. package com.test;  
  2. import java.util.Timer;  
  3. import java.util.TimerTask;  
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. public class TestTimer_Wrong extends Activity {  
  7.     Timer timer = new Timer();  
  8.     TimerTask task = new TimerTask(){  
  9.         public void run() {  
  10.                        setTitle("hear me?");  
  11.         }  
  12.     };  
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.main);  
  16.         timer.schedule(task, 10000);  
  17.     }  
  18. }  

 

TimerTask 里面直接做UI更新,没有在UIThread里面。与Java的EDT线程,是同一概念。

正确写法一 : 交由UI Thread处理

 

[java]     view plain  copy
<EMBED id=ZeroClipboardMovie_2 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
  1. import java.util.Timer;  
  2. import java.util.TimerTask;  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. public class TestTimer extends Activity {  
  6.     Timer timer = new Timer();  
  7.     TimerTask task = new TimerTask(){  
  8.         public void run() {  
  9.               
  10.             runOnUiThread(new Runnable(){  
  11.             @Override  
  12.             public void run() {  
  13.                 setTitle("hear me?");  
  14.             }});  
  15.             }  
  16.     };  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.main);  
  20.         timer.schedule(task, 10000);  
  21.     }  
  22. }  

 

正确写法二 :由Handler处理UI 更新。

[java]     view plain  copy
<EMBED id=ZeroClipboardMovie_3 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
  1. package com.test;     
  2.     
  3. import java.util.Timer;     
  4. import java.util.TimerTask;     
  5.     
  6. import android.app.Activity;     
  7. import android.os.Bundle;     
  8. import android.os.Handler;     
  9. import android.os.Message;     
  10.     
  11. public class TestTimer extends Activity {     
  12.     
  13.     Timer timer = new Timer();     
  14.     Handler handler = new Handler(){     
  15.     
  16.         public void handleMessage(Message msg) {     
  17.             switch (msg.what) {         
  18.             case 1:         
  19.                 setTitle("hear me?");     
  20.                 break;         
  21.             }         
  22.             super.handleMessage(msg);     
  23.         }     
  24.              
  25.     };     
  26.     TimerTask task = new TimerTask(){     
  27.     
  28.         public void run() {     
  29.             Message message = new Message();         
  30.             message.what = 1;         
  31.             handler.sendMessage(message);       
  32.         }     
  33.              
  34.     };     
  35.     public void onCreate(Bundle savedInstanceState) {     
  36.         super.onCreate(savedInstanceState);     
  37.         setContentView(R.layout.main);     
  38.         timer.schedule(task, 10000);     
  39.     }     
  40. }  
但是,使用handler处理还会引发一个内存泄露的问题。详见http://blog.csdn.net/hunanly/article/details/46915199
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值