逍遥游下载,可爱背景图片,恋物论坛
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); } }, 0,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 studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论