Android---消息机制Handler

想要了解Handler,首先要知道为什么要有Handler机制,假设我们要请求网络上的数据,网络请求是耗时操作(因为网络可能存在不稳定性),而在安卓4.0手机版本以后,规定耗时操作必须放在子线程中进行。
例如下面的例子:这是在子线程中的一行代码,我是从Tomcat服务器(学习过程,只有用Tomcat模拟)上获取的数据versionCode,之后从本地获取到了版本号版本号mLocalVersionCode,接下来我想比较这两个版本号,如果服务器的版本号大,我想让他弹出更新的UI,但是我在子线程进行不了对UI的操作,所以必须用Handler消息机制。

if(mLocalVersionCode < Integer.parseInt(versionCode))
  //提示更新(弹出对话框UI,因为在子线程中,无法操作UI,所以需要用消息机制handler)

接下来讲Handler到怎么用,到底是个什么东西
Handler可以将从网络获取的数据从子线程发送到主线程,让主线程去操作UI.
引用Handler有几个步骤:
1.在主线程中创建一个Handler对象
2.重写handleMessage方法,用来接收子线程发来的消息。

 private Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
        //接收子线程消息
};

3.子线程中创建一个Message对象,为了携带子线程中的对象给主线程,两种方式,第二种底层用了同步锁,会节省内存。
第一种

//创建一个消息
 Message msg=new Message();
 msg.obj=result;(将获取的数据封装到msg中,result是从服务端获取的数据)

第二种

 //创建一个消息
 Message msg=Message.obtain();

4.使用Handler对象将Message对象发送到主线程

mHandler.sendMessage(msg);           //mHandler在第一步已经被定义成了成员变量,将第三步的msg消息发出

5.handleMessage方法接收到发送来的数据,处理数据

 private Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
        //接收子线程消息
        String result =(String)msg.obj;  //将接收来的数据强转成原来的String类型
        //进行UI的操作
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值