学习Android Handler消息传递机制
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的消息机制Android消息机制Handler的工作过程详解Android 消息机制以及handler的内存泄露Android6.0 消息机制原理解析Android 消息机制问题总结深入浅析Android消息机制Android中Handler消息传递机制Android中利用App实现消息推送机制的代码Android消息循环机制源码深入理解
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341