码迷,mamicode.com
首页 > 其他好文 > 详细

异步消息处理机制

时间:2016-06-29 18:53:00      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

异步消息处理机制主要由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工程师们帮我们做了很好的封装而已,想了解使用Asyntask的相关知识请看这篇文章

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

异步消息处理机制

标签:

原文地址:http://www.cnblogs.com/cxsy/p/5627840.html

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