Android 消息机制(二)Handler对消息机制的使用
Android 消息机制(一)消息队列的创建与循环的开始 Looper与MessageQueue中讲述了消息机制的底层实现,下面就从平时所常用的Handler
来讲述消息机制的使用。
Handler
Handler
是我们平时进行异步、多线程开发中常用的一个组件,如果在应用主线程中调用阻塞的或者资源消耗量大的任务,会造成UI的更新卡顿,所以我们会将这样的任务放在新的线程中进行操作。当需要通知UI进行更新时,我们会使用Handler
创建消息丢入主线程的消息队列,再等待主线程的Handler
的处理方法随着消息的处理而被调用,再进行下面的操作。这是Handler
的基本用法,它的实现就与消息机制密切相关。
下面我们就对它的实现进行分析。
Android 消息机制(一)消息队列的创建与循环的开始 Looper与MessageQueue
写在前面
本文基于Android 7.1.1 (API 25)
的源码分析编写
与之前的触摸事件分发机制分析的文章一样,Android
系统机制的分析中关键的一环就是事件消息的处理。之前也说过,Android
本质上是一个事件驱动的模型,通过各式各样不断产生事件消息的来推动UI、数据的更新与对我们交互的反馈,没有事件消息的产生,就不会有直观的界面的变化,也就不会有应用丰富的功能。
所以Android
的消息机制与其他过程的关系是极其紧密的,例如启动Activity
的过程就涉及到ActivityManagerService
与应用主进程的通信,产生的通知消息通过Binder
机制送入应用主进程的消息队列,再由主进程的消息循环来读取这一消息来进行处理。之前触摸事件分发中也是利用了应用主进程的消息队列来读取我们的触摸事件再进行后续的分发处理。可以说消息队列在各种通信过程中无处不在。
消息队列的存在为异步处理提供了一个非常好的基础,有了消息队列之后,我们就可以在新的线程中处理计算、IO密集、阻塞的任务而不会影响UI的更新,在处理过程中可以通过向消息队列中放入消息来进行UI的更新操作,而发送消息的行为也避免了工作线程为了等待返回而造成的阻塞。
可以说,想要了解其他基于事件的过程,对主线程消息机制的了解是必不可少的基础,在触摸事件分发机制分析的文章中我对消息机制还不是很了解,所以后来发现分析中有很多描述不妥的地方,所以在对消息机制的系统学习之后我又修改完善了这部分的内容。
Android 触摸事件分发机制(一)从内核到应用 一切的开始
写在前面
本文基于Android 7.1.1 (API 25)
的源码分析编写
安卓是基于触摸操作进行交互的系统,几乎所有的操作都由对屏幕的一次次触摸完成,如何正确处理触摸事件关乎整个应用的操作体验。因此安卓对于触摸事件的分发与处理机制也是我们学习安卓开发的重中之重。同时几乎每一个安卓技术博客中都会对触摸分发机制这一块进行详解,例如比较早期也是最为出名的郭霖(《第一行代码》的作者)。现在网络上对于这一块的分析也已经比较详尽了,基本上一篇博客中遗漏的部分都可以在其他博客中找到答案。
但是无论别人的文章讲得多好,多么详细,我们都需要自己去打开源码仔细分析好好体会,一是这样一个比较复杂的过程不经历自己的思考很难完全理解,二是随着api
版本的推进这部分源码也会发生很多变化,虽然大致思路相同,但是接触到新的内容总是一件好事。
这也就是我写这篇博文的原因:记录自己思考与分析的过程。
TP-Link mr12u-v1刷openwrt+mentohust交叉编译(附文件下载)
写在前面
开学学校启用了有线网,由于校园网存在只能单一设备登陆的限制与无线登陆限速,所以想通过路由器刷openwrt
再使用mentohust
进行校园网的锐捷认证来实现多设备与不限速使用。
在选择路由器时考虑了如下因素:
- 可刷
openwrt
:只有特定的处理器支持openwrt
,支持的路由器型号在官网有一个列表,直接参照这个列表选就可以了。 - 有电源/usb供电:在寝室使用的话因为有段时间断电但不断网,所以需要自带电源或可用移动电源usb供电。
- 性价比高:因为只用于转发校园网,所以可以买便宜一些的。
最终选择了TP-Link mr12u
这款路由器,在闲鱼上找了一家同城二手的,45元人民币拿下。
Android Context理解与陷阱
深入理解计算机系统(CS:APP) - Attack Lab详解
Attack Lab
实验代码见GitHub
简介
Attack Lab
的内容针对的是CS-APP
中第三章中关于程序安全性描述中的栈溢出攻击。在这个Lab
中,我们需要针对不同的目的编写攻击字符串来填充一个有漏洞的程序的栈来达到执行攻击代码的目的,攻击方式分为代码注入攻击与返回导向编程攻击。本实验也是对旧版本中IA32
编写的Buffer Lab
的替代。
我们可以从CMU
的lab
主页来获取自学者版本与实验讲义(Writeup),讲义中包含了必要的提示、建议与被禁止的操作,从这个lab
开始之后的lab
对讲义中内容的依赖还是很强的。
特别提示 本
lab
的自学者版本需要在运行程序时加上-q
参数来避免程序向不存在的评分服务器提交我们的答案导致报错