异步消息处理机制
Posted )^程序猿^(
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步消息处理机制相关的知识,希望对你有一定的参考价值。
异步消息处理机制主要由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
以上是关于异步消息处理机制的主要内容,如果未能解决你的问题,请参考以下文章