Android Handler 深入学习(1)
Android 上的应用类似于 Win32 的消息处理机制,也是由消息驱动来工作的。也是会涉及到消息,消息队列,消息循环,以及处理消息的应用层上的消息处理器。
下图为 Looper, Handler, Message, MessageQueue 之间的静态关系
下面会对几个相关组件逐步深入学习了解,先从 消息循环 Looper 开始 了解整个消息的处理流程,并在这个过程中逐步深入了解其他的组件。
Looper 主要封装了消息循环(loop方法),且维护了相关联的消息队列,结合上图以及Looper的实现源码可以看到 mMainLooper 就是 Looper 的一个静态实例,是存在于应用的主线程中的,当然我们也可以通过 Looper 的 prepare 和 loop 创建一个自己的 Looper,如下实例:
class LooperThread extends Thread {public Handler mHandler;public void run() {Looper.prepare();mHandler = new Handler() {public void handleMessage(Message msg) {// process incoming messages here}};Looper.loop();}
}
在应用中可以如下启动 Looper Thread:
new LooperThread().start();
这里其实也就是启动一个执行 LooperThread.run() 的新线程,下面分析一下里面的两个Looper的关键调用prepare和loop,也是从 loop 开始了消息循环。
1) Looper.prepare
public static void prepare() {// 这里就限制了一个线程内只能 prepare 一次if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}// 构造一个 Looper 对象,并设置到调用线程的线程局部变量中sThreadLocal.set(new Looper());
}
再来看 prepare 中 new 出来的 Looper 实例的构造:
private Looper() {mQueue = new MessageQueue();mRun = true;mThread = Thread.currentThread();
}
首先它是一个 private,也就限制了外部只能通过 prepare 来创建 Looper,也进一步确保一个线程内只能有一个 Looper 对象。
另外,看到了此处创建了消息队列,并得到了该 Looper 所属的 thread。
转载于:https://blog.51cto.com/quietmadman/1282250
Android Handler 深入学习(1)相关推荐
- Android 系统(189)---Android Handler:这是一份 全面、详细的Handler机制 学习攻略
Android Handler:这是一份 全面.详细的Handler机制 学习攻略 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将献上一份 全面.详细的Handl ...
- android面试 handler,Android面试之Handler相关学习
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? ###Android面试之Handler相关学习 1.Android消息机制之Looper.java源代码学习 1). ...
- Android Handler介绍
本文转自:http://www.cnblogs.com/keyindex/articles/1822463.html 前言 学习android一段时间了,为了进一步了解android的应用是如何设计开 ...
- epoll监听文件_介绍一下 Android Handler 中的 epoll 机制?
介绍一下 Android Handler 中的 epoll 机制? 目录: IO 多路复用 select.poll.epoll 对比 epoll API epoll 使用示例 Handler 中的 e ...
- android Handler的使用(一)
Handler的使用(一) Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出 ...
- Android开发基础学习总结
最近一直在学习安卓开发,主要从安卓的基础组件,布局,Activity学起,也是边学习边整理笔记,希望可以给需要帮助的人解决能解决掉的问题,以后也会慢慢更新的. 一.Android布局 1.Androi ...
- Android基础知识点学习总结
Android基础知识点学习总结 安卓基础知识个人学习笔记分享~ 一.Android系统架构 Linux内核层→系统运行层→应用框架层→应用层 1.Linux内核层:Android系统是基于Linux ...
- 2021年超详细的-Android超神学习路线总结--纯干货分享(字节,阿里,腾讯大牛联合打造)
前言 2021年秋招没有找到满意工作的童鞋,考研结果不理想的童鞋,留学生回国的童鞋们,都开始准备2021年的春招了,如果想从事Android开发工作,可以参考本文. 本文整理了Android开发的学习 ...
- android源码学习-Toast实现原理讲解
前言: 前些日志QQ群有朋友发了一个Toast的崩溃日志.Toast如此简单的用法怎么会崩溃呢?所以顺便就学习了一下Toast在源码中的实现,不算复杂,但内容挺多的,这里就来分享一下,方便读者. 一. ...
最新文章
- 20年来最不靠谱的五大互联网预言
- 11.C++: cin、cin.get()、cin.getline()、getline()、gets()
- linux检测文件名编码,Linux下查看文件编码,文件或文件名编码格式转换 | 缥缈的云...
- css类选择器优先级 大于 标签选择器
- python json dumps utf8_Python2操作JSON出现乱码的解决方案
- Android之layout属性介绍
- pytorch图像和张量的相互转换_Day107:Pytorch张量类型的构建与相互转换
- Java中的关键字@Override解释
- c# 溢出抛异常_C#中的int是否没有溢出异常?
- css matrix矩阵,矩阵 | matrix() (Transforms) - CSS 中文开发手册 - Break易站
- 屏幕共享软件开发_工作生活离不开软件,你知道什么是免费软件与共享软件吗?...
- 【优化算法】蜻蜓算法(DA)【含Matlab源码 1306期】
- Http协议详解(深入理解)
- 科创板第二批受理名单公布,为何AI独角兽 “全军覆没”?
- Leetcode 刷题 - 排序(day4)_颜色排序
- 2, 世界上第一台电子数字计算机叫什么?它诞生在哪个国家?,世界上第一台电子数字,计算机叫什么名...
- 各代DDR内存的速度表
- C++写一个CSGO开箱模拟器
- Echarts-gl geo3D设置regions区域高度
- 安卓ImageView镜像翻转