开发艺术探索 -- Android中的消息机制
来源:互联网 发布:直播系统源码 编辑:程序博客网 时间:2024/05/01 19:09
第十章,Android中的消息机制
消息机制概述
消息机制分析
主线程的消息循环
之前的总结 关于Android中的Handler 机制
消息机制概述
Android
消息机制的上层接口就是Handler
.Handler
需要MessageQueue,Looper
做支撑.Handler
创建的时候会采用当前线程的Looper
,涉及到ThreadLocal
Handler
的作用是将一个任务切换到指定的线程执行ViewRootImpl#checkThread
会对ui操作进行验证.- 为甚不能再子线程访问ui(Android
ui单线程模型
,防止ui访问逻辑复杂和效率低下
)
消息机制分析
ThreadLocal
是一个线程内部的数据存储类
MessageQueue
包含插入
和读取
操作,插入本身会伴随着删除操作
插入
和读取
分别对应着enqueueMessage
和next
方法MessageQueue
并不是队列
数据结构,而是一个单链表
Looper
扮演着消息循环的角色,不停地查看MessageQueue
中是否有新消息Looper.prepare
即可为当前线程创建Looper
,通过Looper.loop
即可开启循环prepareMainLooper
是为主线程ActivityThread
创建Looper
的- Looper提供了
quit(立即退出) 和 quitSafely(消息执行完安全退出)
来退出一个Looper
Looper
退出后,sendMessage
返回false,发送消息失败.- 在子线程中创建的
Looper
,建议不需要时手动退出
Looper#quit
调用后MessageQueue#next
返回null,跳出循环.
Handler工作原理
Handler
发送一条消息,则MessageQueue
的next
就会返回这条消息的Looper
,Looper
接到消息后就会调用Handler#dispatchMessage
来处理消息了.
Handler处理消息的过程:
- 检查
message.callback
是否为null,不为null,则handleCallback
- 检查
mCallBack
是否为null,不为 null,则调用mCallBack.handleMessage
- 当
mCallBack.handleMessage
返回false
或者没有没有mCallBack
,调用Handler#handleMessage
通过
CallBack
创建Handler
可以创建一个Handler
实例,而不用派生Handler
的子类
主线程的消息循环
Android
中的主线程就是ActivityThread
,入口是main
,其会调用Looper.prepareMainLooper
来创建主线程的Looper
及MessageQueue
,并通过Looper.loop
来开启消息循环.- 主线程消息循环开启后,
ActivityThread
还会开启一个ActivityThread.H
的Handler
来和消息队列
进行交互.ActivityThread.H
内部还定义了四大组件启动和停止相关消息.
0 0
- 开发艺术探索 -- Android中的消息机制
- android艺术开发探索之消息机制
- 《Android开发艺术探索》--消息机制
- 《Android开发艺术探索第十章读书笔记》-Android消息机制
- 《Android开发艺术探索》笔记(2)Android消息机制
- 《Android开发艺术探索——Android的消息机制》
- 《android开发艺术探索笔记》Part10、Android的消息机制
- Android开发艺术探索读书笔记(第10章 消息机制)
- 《Android开发艺术探索》之消息机制(一)
- 《Android开发艺术探索》--Android中的IPC机制
- Android消息机制——消息队列工作原理(Android艺术开发探索读书笔记)
- Android开发艺术探索_IPC机制(二)
- Android开发艺术探索读书笔记-IPC机制
- 【读书笔记】【Android开发艺术探索】第10章 Android 的消息机制
- Android 开发艺术探索——第十章 Android的消息机制
- Android消息机制——ThreadLocal(Android艺术开发探索读书笔记)
- 《Android 开发艺术与探索》笔记——(10)Android 的消息机制
- 读书笔记:Android开发艺术探索之第10章 android的消息机制
- 开发艺术探索 -- 四大组件的工作过程
- 一个隐马尔科夫模型的应用实例:中文分词
- 设备管理器进行锁屏和数据清除等功能
- 夕拾朝花——我的2016
- java反射机制的原理与简单使用
- 开发艺术探索 -- Android中的消息机制
- dedecms自带CKEditor编辑添加行间距按钮
- struts2学习笔记之十:文件上传
- RAC异机恢复
- GLSurfaceView
- CLR via C# 阅读 笔记
- 使用Html5+C#+微信 开发移动端游戏详细教程 总目录
- 【已解决】Windows Service 问题System.IO.FileNotFoundException: 未能加载文件或程序集“file:///”或它 的某一个依赖项。系统找不到指定的文件。。
- 云计算上机实验