Android异步消息处理和应用
来源:互联网 发布:python opencv教程 编辑:程序博客网 时间:2024/06/05 05:30
介绍Handler, Looper, MessageQueue, Message之间的关系
ref:
http://blog.csdn.net/lmj623565791/article/details/38377229/
一.Handler, Looper, MessageQueue各自的主要功能以及之间的关系
三者之间的关联
三者之间的运转流程:
Thread/Runnable:
应用一般将消息处理放在非阻塞的线程里面
通过Handler来接收handle message
Handler:
1.提供消息接口
发送消息存储到消息队列mQueue: sendMessage
获取消息对象空间并赋值:obtainMessage
消息回调接口:dispatchMessage 最终是调用消息handleMessage来处理消息,但实际一般由父类重写的handleMessage来处理.
2.关联MessageQueue
3.获取looper
Looper:
1.每个线程只能创建一个looper
2.looper最好不要放在主线程中或者容易阻塞的接口或模块里面
3.每个线程中Looper.prepare ->Looper.loop最好只调用一次,否则会抛异常.
Looper主要包含
(1)消息队列MessageQueue , 与Handler的mQueue进行关联
(2)loop循环分发消息,调用Message.target.dispatchMessage(msg);
其中第2点,举个例子:
android.media;public class MediaPlayer ...{ private EventHandler mEventHandler; private Looper mSavelogLooper = null; public MediaPlayer() { Looper looper; if ((looper = Looper.myLooper()) != null) { mEventHandler = new EventHandler(this, looper); //使用主线程的looper [可能来activity之类的主线程的looper] ===>From: Activity->ActivityThread->Looper.prepareMainLooper() } } public native void prepare(); public class SaveLogThread extends Thread { //子线程单独创建一个Looper并启动loop. public Handler mHandler; public SaveLogThread(){ super(); } public void run() { Looper.prepare(); mSavelogLooper = Looper.myLooper(); mHandler = new Handler() { public voidhandleMessage(Message msg) { ... }); Looper.loop(); }
但调用prepare阻塞时,主线程受阻, 底层通过mEventHandler 发送消息的时候,主线程的looper就无法发送和处理消息了.
MessageQueue:
管理消息Message,增加,删除.
阅读全文
0 0
- Android异步消息处理和应用
- Android异步消息处理
- Android异步消息处理
- android 异步消息处理
- Android异步消息处理
- Android异步消息处理
- Android 异步消息处理
- Android之异步处理Handler和消息机制处理
- (一)Android 异步消息处理
- Android异步消息处理机制
- Android异步消息处理机制
- Android异步消息处理机制
- android异步消息处理机制
- Android异步消息处理机制
- android异步消息处理机制
- Android异步消息处理机制
- android 异步消息处理线程
- Android异步消息处理机制
- qduoj 生化危机
- Effictive Java
- vue 数据绑定实现的核心 Object.defineProperty()
- uploadify上传文件
- 看电视
- Android异步消息处理和应用
- Java核心之异常处理
- 链表--链表K个翻转
- 【NOIP2001普及组T4】1055·背包1(填满型01背包)
- PAT 1046划拳
- Struts2用通配符进行模糊分页查询
- UVa 10702
- index页面直接跳转其他页面
- nyoj-103 A+B Problem II