Handler原理总结
来源:互联网 发布:单片机引脚定义 编辑:程序博客网 时间:2024/05/16 15:21
Handler用于将一个任务切换到某个指定线程中去执行,可以看成一个生产者消费者模式,
Handler在子线程中发送消息,最终是通过MessageQueue的enqueueMessage方法把Message对象添加到MessageQueue中,
MessageQueue维护了Message这个单链表的具体操作。
而主线程中Looper是系统自动创建的,在其loop方法用于读取MessageQueue中的消息对象,并交由handler的dispatchMessage方法去分发消息,
处理完成后回收Message对象。
Looper通过prepare方法创建,并用ThreadLocal持有这个对象。
为什么用ThreadLocal持有Looper对象?
一般来说,当某些数据是以线程为作用域并且不同线程具有不同副本的时候,
可以考虑采用ThreadLocal。
Looper就属于这种情况,如果不采用ThreadLocal,那系统就必须提供一个全局的
哈希表拱Handler查找指定线程的Looper。
分发消息的机制是:
1.先判断msg的callback是否为空,不为空则处理callback任务,这个任务是通过post方法已实现Runnable接口的形式添加的。
2.如果msg的callback为空,则判断Handler的成员Callback是否为空,如果不为空,则执行Callback的handleMessage方法的具体实现,
这个具体实现是以不需要派生Handler子类的形式生成Handler传入的参数。
3.如果执行callback的handlerMessage返回true,则结束消息处理。否则继续调用Handler的handleMessage方法处理消息。
4.如果没有传入callback的实现,而直接以派生子类的方式创建Handler,则直接执行Handler的handleMessage方法处理消息。
- Handler 原理总结
- Handler原理总结
- Android Handler消息机制原理及总结
- 有关Handler机制原理的总结
- Handler原理
- Handler原理
- Handler 原理
- Handler原理
- Handler原理
- Handler原理
- Handler总结
- Handler总结
- Handler总结
- Handler总结
- Handler总结
- handler总结
- Handler总结
- Handler总结
- SJA1000的调试经历【转】
- kafka集群环境搭建
- SecureCRT:保存输出日志的方法
- linux配置tomcat
- Collection接口和List接口中常用的方法
- Handler原理总结
- 算法题练习系列之(二十三): 完美数列
- 学习Gradle笔记
- Servlet会话技术基础
- [Leetcode] 31, 60, 36
- 【杭电1233 -- 还是畅通工程】 (最小生成树)
- 包装类
- vs2013+qt5.6添加qcustomplot报无法解析的外部符号
- UDP服务器