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

Android handler 的使用

时间:2015-08-11 16:11:09      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:android handler

Handler的作用和定义:

主要接受子线程发送的数据, 并用此数据配合主线程更新UI。

解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,    或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭"。  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的, 也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。 这个时候,Handler就出现了。,来解决这个复杂的问题 ,由于Handler运行在主线程中(UI线程中),  它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

在类里定义一个handler变量,例如:

Hanler handler=new Hanler(){
public void HanleMessage(Message msg){// 函数名不能变
switch(msg.what){//msg.what一般传递线程里需要界面操作执行的操作
Bundle bundle=new Bundler();
bunle=msg.getData();从传过来的message数据中取出传过来的绑定数据的bundle对象
String str=bundle.getString("string");//从bundle中取出数据
text.setText(str);//具体操作
}
}
};

在接收线程里使用handle变量(该例子是把数据text传递到可以操作布局的handler里)
String text="text";
Message message=new Message();
Bundle bunle=new Bundle();
bundle.putString(text);
message.setData(bundle);
handler.sendMessage(message);

这样就可以把线程里的string数据传递到handler里了,handler就可以进行布局的操作

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android handler 的使用

标签:android handler

原文地址:http://blog.csdn.net/u010184245/article/details/47421219

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