Android消息驱动Handler类分析
Android系统中的消息驱动工作原理:
1、有一个消息队列,可以往这个消息队列中投递消息;
2、有一个消息循环,不断的从消息队列中取得消息,然后处理。
工作流程:
1、事件源将待处理的消息加入到消息队列中,一般是加至队列尾部(优先级高的消息可以加至队列头),事件源提交的消息可以是按键、触摸等物理事件产生的消息,也可以是系统或应用程序发出的消息;
2、处理线程不断的从消息队列头中取出消息并处理。
在Android系统中,这些工作主要由Looper和Handler实现:
Looper类,用于封装消息循环,并且有一个消息队列;
Handler类,封装消息投递、消息处理等接口
Handler类分析
Handler中包括的成员:
Hadler.java:
final messageQueue mQueue; //Handler中也有一个消息队列
final Looper mLooper;
final Callback mCallback; //i回调用的类
在Handler的构造函数中,Handler中的消息队列最终会指向Looper的消息队列。
(1)插入消息到Looper消息队列
Handler提供了一系列帮助完成创建消息和插入消息队列的函数。
例如Handler.java中sendMessage发送一个消息,将消息添加到消息队列末尾:
public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0);
}public final boolean senMessageDelayed(Message msg, long delayMilis){......return senMessage(msg, SystemClock.uptimeMillis() + delayMillis); // 当前时间
}public boolean sendMessageTime(Message msg, long uptimeMillis) {boolean sent = false;MessageQueue queue = mQueue;if (queue != null) {msg.target = this; // 将targt设置为自己,然后加入到消息队列sent = queue.enqueueMessage(msg, uptimeMillis);
}return sentl
}
(2)Handler的消息处理
在loop方法中,如果获得消息后会调用target的dispatchMessage函数,然后将这个消息派发给Handler处理。
dispatchMessage定义了一套消息处理的优先级机制:
> Messagu如果自带callback处理,则交给callback处理;
> Handler如果设置了全局的mCallback,则交给mCallback处理;
> 如果上述都没有,消息则会被交给Handler子类实现的handleMessage 来处理。(这需要从Handler派生并重载handleMessage函数)
注‘Android技术交流群653583088,欢迎大家加入交流,畅谈!本群有免费学习资料视频’
转载于:https://www.cnblogs.com/876013676ch/p/10187276.html
Android消息驱动Handler类分析相关推荐
- Android消息机制(Handler机制) - 线程的等待和唤醒
我们都知道,Android的Handler机制,会在线程中开启消息循环,不断的从消息队列中取出消息,这个机制保证了主线程能够及时的接收和处理消息. 通常在消息队列中(MessageQueue)中没有消 ...
- Android消息机制Handler用法
这篇文章介绍了Android消息机制Handler用法总结,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 1.简述 Handler消息机制主要包括: Messa ...
- 通过源码简要分析之Android消息机制Handler、Looper、MessageQueue运行机制
用了许久的Handler,对于Handler的使用确实是比较熟悉,但是具体内部是如何运作的,却只是模糊的.Handler发出的消息怎么到达MessageQueue?MessageQueue的数据怎么被 ...
- Android 消息机制 Handler总结
老久就想着写一篇 关于消息机制的文章来总结一下. Android的消息机制主要是指Handler 的运行机制.我们在开发时有的时候需要在子线程进行耗时的I/o 操作,可能是读取文件或者 访问网络等,有 ...
- Android USB驱动源码分析(-)
Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...
- Android USB驱动源码分析
Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...
- android 消息轮训,Android消息机制Handler,有必要再讲一次
我们在日常开发中,总是不可避免的会用到 Handler,虽说 Handler 机制并不等同于 Android 的消息机制,但 Handler 的消息机制在 Android 开发中早已谙熟于心,非常重要 ...
- 底层之旅——Android显示驱动(framebuffer)的分析
Android有其完整的显示系统,上层显示系统提供系统图形的输出设备,java层的和和控件的外观和直接的图形接口的绘制都是通过显示系统呈现出来的.Android的底层显示系统与Android的Surf ...
- android 消息循环机制--looper handler
Looper类说明 Looper 类用来为一个线程跑一个消息循环. 线程在默认情况下是没有消息循环与之关联的,Thread类在run()方法中的内容执行完之后就退出了,即线程做完自己的工作之后就结 ...
最新文章
- JAVA编程思想读书笔记(三)--RTTI
- AcWing1091.理想的正方形(单调队列DP)
- matlab 小波启发式阈值滤波,小波阈值去噪
- 基于Spark的学生成绩分析系统
- 一条命令解决macmnsvc.exe占用8081端口的问题
- 一万块内工作站型计算机配置,1.5万元i7-7700K用于图形工作站高端电脑配置推荐...
- Oracle Spatial 安装和使用
- 辛苦开发的 App 被山寨?mPaaS 帮你为 APK 上把加固锁
- 《霍乱时期的爱情》读后感
- Git - git 入门
- ecshop linux 大小写,ecshop敏感词管理
- 在wps中的ppt加入水印转成pdf后加入密码权限
- [C8MIm]SbF6离子液体379712-23-9/1-辛基-3-甲基咪唑六氟锑酸盐的分子量:431.0748392对吗?
- 使用eBPF将网络功能Offload到网卡
- java 64位 默认分配内存大小_JVM默认内存大小
- 使用proxy_pool来为爬虫程序自动更换代理IP
- 带你认识最基本的网页和网站,什么是静态网页和动态网页,有什么区别?
- keil如何进行软件仿真,以及如何查看变量的实时值
- CAXA 实体设计 2020 如何显示三维球约束尺寸?
- 番外篇:研究生心得:研一篇