异步消息处理机制

异步消息处理机制主要由Message,Handler,MessageQueue和Looper这四部分组成

1.Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据

2.Handler是处理者的意思,它主要用于发送和处理消息,发送消息通过Handler的sendMessage()方法,发出的消息最终会被传递到Handler的handleMessage()方法中

3.MessageQueue是消息队列,用来存放Handler发送的消息,这些消息一直存放在消息队列中等待被处理,每个线程只有一个MessageQueue对象

4.Looper是专门来从MessageQueue中取出消息的,调用Looper的loop()方法后,就会不断的从消息队列中取出消息传递到Handler的handleMessage()方法中,而每个线程中也只有一个Looper对象

示例代码如下:

//用来标记Handler消息的常量
public static final int UPDATE_TEXT = 1;
//首先需要在主线程创建一个Handler的子类对象,
//子类还需要重写Handler的handleMessage()方法
private Handler handler = new Handler(){
    public void handleMessage(Message msg){
        switch(msg.what){
            case UPDATE_TEXT:
                // 在这里可以进行UI操作
                text.setText("Hello World");
                break;
            default:
                break;
        }
    }
}
//然后需要在子线程中创建一个Message对象
...
new Thread(new Runnable() {
    @Override
    public void run() {
        Message message = handler.obtainMessage();  
        message.what = UPDATE_TEXT;
        handler.sendMessage(message); // 将Message对象发送出去
    }
}).start();
注意:上面为什么用的是handler.obtainMessage()而不是new Message(),
这里面差别其实并不大,只是前者是从消息池中拿来一个msg,不需要重新new,节省了一点内存空间

这样一个简单的异步消息处理机制就完成了,
为了更加使我们更方便的在子线程中对 UI 进行更新, Android还提供了AsyncTask。借助 AsyncTask,即使对异步消息处理机制完全不了解,

也可以容易地从子线程切换到主线程。当然,AsyncTask的实现原理也是基于异步消息处理机制的,

只不过Android工程师们帮我们做了很好的封装而已,想了解使用Asynctask的相关知识请看这篇文章

http://www.cnblogs.com/cxsy/p/5608334.html

转载于:https://www.cnblogs.com/cxsy/p/5627840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值