handler机制要做的事情:

  1.把一堆从四面八方传来的message加到一个队列中,这个队列就是MessageQueue。

  2.将MessageQueue中的队头Message取出,并使用这个message自带的handler来handleMessage。

稍微有些特别的是,handler将这两件事分成两个线程来处理,这样就保证了服务器能在处理msg1的同时将msg2入队。

所以Message.java就是链式队列MessageQueue中的Node,特别的是除了要存基本的信息之外,还要保存一个Handler,这样处理消息的线程就知道应该如何处理这条消息。

上面说了Message.java 和MessageQueue.java,接下来说Handler.java和Looper.java。

Handler.java:

  一个处理msg的工具,它有两个方法:sendMessage()和handleMessage(),上面说的那两件事就是分别用这两个方法来完成的。

  要注意的是,Handler中存了一个MessageQueue,这个mq与Looper中的mq相关联,换句话说,这两个mq共用一个内存单元。怎样实现这件事呢:handler的构造函数要传入一个Looper,handler在初始化时将handler的mq指向looper的mq。

Looper.java:

  这个东西有点抽象,做一个比喻,Message是鸡腿、MessageQueue是冰箱、Handler就是两个动作:把鸡腿放冰箱里;把鸡腿拿出来并且吃掉。这样来看有了上面三个程序,好像我已经可以把鸡腿放冰箱里并且拿出来吃掉了,那为什么要有looper这个东西?

  looper在这里做的事情应该说很灵魂了,有两点:

    1.它保存了最重要的东西:mq,也就是looper才知道冰箱在哪里,甚至说这个冰箱是looper创建的。

    2.loop()是一个死循环,这个循环里不断执行两个动作:把鸡腿拿出来并且吃掉。也就是上面说的handler机制要做的第二件事:消息出队并处理消息。

  所以说,如果没有looper我甚至不知道有鸡腿的冰箱在哪,我虽然会拿鸡腿、吃鸡腿这两个动作,但我并不知道要这样做,没有looper我就是一个吃不到鸡腿的小可怜!

  消息入队的线程:不停的进行消息入队这个动作,每个msg自带一个target:handler,所以它被放入这个handler的mq中,而handler在初始化时就将自己的mq指向了looper中的mq。

  消息出队并处理消息的线程:这个线程调用了loop(),不停的从mq中取出队头元素,这个mq正是这个looper中保存的mq,也就是消息入队线程中handler指向的那个mq。

这样两个线程就对同一个mq同时执行不同的动作。

java——极简handler机制的更多相关文章

  1. 资源对象的池化, java极简实现,close资源时,自动回收

    https://www.cnblogs.com/piepie/p/10498953.html 在java程序中对于资源,例如数据库连接,这类不能并行共享的资源对象,一般采用资源池的方式进行管理. 资源 ...

  2. Android Handler 机制总结

    写 Handler 原理的文章很多,就不重复写了,写不出啥新花样.这篇文章的主要是对 handler 原理的总结. 1.Android消息机制是什么? Android消息机制 主要指 Handler ...

  3. 极简 Node.js 入门 - 2.4 定时器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  4. Android的Handler机制

    Handler机制的原理 Android 的 Handler 机制(也有人叫消息机制)目的是为了跨线程通信,也就是多线程通信.之所以需 要跨线程通信是因为在 Android 中主线程通常只负责 UI ...

  5. java的动态代理机制详解

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  6. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  7. Resty 一款极简的restful轻量级的web框架

    https://github.com/Dreampie/Resty Resty 一款极简的restful轻量级的web框架 开发文档 如果你还不是很了解restful,或者认为restful只是一种规 ...

  8. Java的动态代理机制详解(转)

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  9. Handler机制原理图、源码、使用!!!!!

    android的消息处理机制——Looper,Handler,Message  (原理图.源码) 转自:http://my.oschina.net/u/1391648/blog/282892 在开始讨 ...

随机推荐

  1. JS对表单的操作

    JS对表单中的style的操作,包括复选框技术 废话不多说直接上文件代码!!! 功能:全选\反选,鼠标监测变颜色 <html> <head> <meta charset= ...

  2. Opencv读取图片像素值并保存为txt文件

    #include <opencv2/opencv.hpp>#include<vector>#include <fstream> using namespace st ...

  3. ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)

    ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...

  4. poj2287 Tian Ji -- The Horse Racing

    传送门 分析 这个题和传统的田忌赛马不一样的地方就是多了平局情况,所有我们不难想到要用dp.我们先将两人的马均降序排列,用dpij表示考虑前i匹马,田忌有几匹马是按从大到小的顺序从头取的(剩下的是从尾 ...

  5. hdu4283 You Are the One

    传送门 题目 The TV shows such as You Are the One has been very popular. In order to meet the need of boys ...

  6. ubuntu基础知识与技巧

    root用户与超级用户的切换 (1)  sudo -i (2)  sudo su (3)  su root 安装升级 查看软件xxx安装内容 dpkg -L xxx 查找软件库中的软件 apt-cac ...

  7. HTML5游戏开发 PDF扫描版​

    很多从事Web前端开发的人对HTML总有些不满,比如需要手动检查和设计很多格式代码,不仅容易出错,而且存在大量重复.好在HTML5让我们看到了曙光.作为下一代Web开发标准,HTML5成为主流的日子已 ...

  8. RPN(区域生成网络)

    转:懒人元(侵删) RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络. ...

  9. CHTools-Swift版本目录介绍

    CHSwiftBase CHViewControllers CHUI类 CHNetRequest CHSaveData CHSpecialEffect(特效) Other CHSwiftPCH 全局常 ...

  10. 软件测试就业必备知识点&自学软件测试-Dotest-2019

    软件测试就业必备知识点&自学测试&教学大纲-Dotest-2019