学习Android Handler消息传递机制

学习Android Handler消息传递机制,第1张

概述Android只允许UI线程修改Activity里的UI组件。当Android程序第一次启动时,Android会同时启动一条主线程(MainThread),主线程主要负责处理与UI相关的事件,如用户的按键事件、屏幕绘图事件,并把相关的事件分发到对

AndroID只允许UI线程修改Activity里的UI组件。当AndroID程序第一次启动时,AndroID会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件、屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以,主线程通常又被称为UI线程。 

AndroID只允许UI线程修改Activity里的UI组件,这样会导致新启动的线程无法动态改变界面组件的属性值。但在实际的AndroID程序开发中,尤其是涉及动画的游戏开发中,需要让新启动的线程周期性的改变界面组件的属性值,这就需要借助于Handler的消息传递机制来实现了。 

1 Handler类简介 
Handler类的主要作用有两个: 
(1)在新启动的线程中发送消息 
sendMessage(Message msg)  或者 
sendEmptyMessage(int what)   
两者的差异,请看AndroID源码: 

public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg,0); } public final boolean sendEmptyMessage(int what){ return sendEmptyMessageDelayed(what,0); } 

再看sendEmptyMessageDelayed(what,0)的源码: 

public final boolean sendEmptyMessageDelayed(int what,long delayMillis) { Message msg = Message.obtain();msg.what = what; return sendMessageDelayed(msg,delayMillis); }

 其实,sendMessage(Message msg)  和sendEmptyMessage(int what)  实际上是一样的,一个传Message类型的msg,一个传int类型的what,传what的,最终会转为msg。 

(2)在主线程中获取、处理消息
 public voID handleMessage(Message msg) 

2 使用实例 
下面使用Handler以及Timer类实现时间的自动刷新

public class MainActivity extends Activity {  @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); final TextVIEw txt=(TextVIEw)findVIEwByID(R.ID.showTime); final Handler myHandler=new Handler() {  @OverrIDe  public voID handleMessage(Message msg)  {  if(msg.what==0x12)  {   txt.setText("当前时间:"+new java.util.Date());  }  } }; button btn=(button)findVIEwByID(R.ID.btn); btn.setonClickListener(new OnClickListener() {  @OverrIDe  public voID onClick(VIEw arg0) {  // Todo auto-generated method stub  new Timer().schedule(new TimerTask() {  @OverrIDe   public voID run() {   // Todo auto-generated method stub   myHandler.sendEmptyMessage(0x12);   }  },1000);    } }); }  @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main,menu); return true; } } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的学习Android Handler消息传递机制全部内容,希望文章能够帮你解决学习Android Handler消息传递机制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存