由于在Android中,网络请求不能运行在主线程中,同时一些耗时的操作也不建议运行在主线程中。因此多线程以及线程间通信在Android中显得更为重要了,而安卓SDK中也提供给我们很多的多线程机制,譬如:Handler,AsyncTask,以及基于这些机制而来的IntentService,AsyncService,Loader等常用类,其中AsyncTask又是基于Java的Concurrent框架而来的,虽然有些人对AsyncTask抱有怨言,但后面的文章中我们也会以学习的态度对AsyncTask进行深入剖析。这里我们先来对常用的Handler做更深层次的了解。Handler机制可以说是Android开发过程中最常用到的线程通信机制,比如说Activity.runOnUiThread方法,View.post,View.postDelayed等方法底层使用的都是该机制。但是在分析源码之前我们先来对整个框架机制中的几个相关类简单的说明一下。
安卓常用第三方框架-FastJson
简介
上次我们讲到Google的Gson库,作为国际大公司的阿里巴巴也不敢示弱,出了一款号称速度最快的Fastjson,这里有第三方给出的测试结果https://github.com/eishay/jvm-serializers/wiki, 虽然FastJson在Github上戏称Gson的“G”是“龟速”的意思,但FastJson在文档方面确实做得不如Gson(没办法天朝软件行业的通病)。废话不多说下面先给地址。
Windows C++界面库
记得大一学C语言的时候,觉得黑白窗很无聊,后来在网上找到了EasyX (一个模仿turbo c的图形库)http://www.easyx.cn ,用它写一些贪吃蛇、扫雷这类有图形界面的游戏来练手。 当时学的时候就很好奇为什么调用这些函数就能绘制图形,后来从网上了解到了Windows编程,于是从淘宝淘了本《Windows程序设计》看了起来,当时看的时候还有点吃力。
趁着大一结束后的那次暑假我看完了王爽老师编写的《汇编语言》,对计算机内存、CPU等底层方面的知识有了更深一层对的了解后,才重新拾起《Windows程序设计》。当时大二也开始学C++了,还记得“亮欧巴”教完谭浩强写的C++,还不能真正理解面向对象的意义,我在直接用Win32API写窗口程序的时候也感觉到要做很多重复工作,写很多模板代码(但当时自己完全不知道怎么用C++去封装Win32API),于是在网上找了些资料,还记得有一位大神出的视频里面讲了MFC的封装原理后,我自己才试着封装了Win32API(当然没使用MFC的消息映射机制,直接用了C++的虚函数多态),之后才明白C++的诞生是计算机工业发展的必然。学完后立马花了2个多月的时间写了个浏览器(为了应付学校的考试,也为了寒假回家过个好年,无奈拖长战线),当然网页显示直接使用MFC封装好的CHtmlView,这其中80%的时间都花在写界面上,当时还不知道开源社区有封装好的MFC控件,也不知道有CBitmapButton这类东西,完全自己封装,最终写出来的界面还贼TM丑,其实这也归结于当时不会PS,搞得后来很多功能都不愿完善了。
View事件分发机制源码分析
1、事件传递规则概述
在解释事件分发机制之前,需要搞清楚几个概念。
1、事件:由于android设备对键盘依赖性的降低,导致触摸事件(MotionEvent)成为android最主要的事件,所以对于事件的分发,其实就是对MotionEvent对象的传递过程。
2、事件序列:从用户手指按下,到手里离开的这一系列事件的集合(可以看成用户在屏幕上的一个手势)。即事件序列以ACTION_DOWN开始,ACTION_UP结束:ACTION_DOWN–>ACTION_MOVE–>ACTION–>…->ACTION_UP事件。