1、引言
马上就2017年了,时间过得真快。最近学习了一下架构师相关的能力解析和整理了一下自己在应用软件架构、MVC、分层上面的理解(这个不仅仅是Android系统,也是windows客户端系统,也是web系统)
掐指一算,我从11年末开始搞安卓到现在也5年了,在这期间做过好些个Android应用,也有幸在application framework里面倒腾过一阵子。Android相关的知识在我脑海里一直散乱的摆放着,也没有认认真真整理一下。今天来想想这么多年,我理解的Android体系架构的一些要点在哪里。
2、Android 系统架构图
从网上很容易就找到了这个Android系统架构图。分层结构非常漂亮
大家刚开始做安卓应用的时候,可能会撇到这张图,不会觉得这个图有什么用。绝大部分人花相当大的时间在Application层上面,接触到了Framework层,其它层没有看到,也能把应用做出来,但是要做好应用的话,就得学习好Android Framework, 理解好DalvikVirtualMachine,用好一些Libraries。如果所做的事情涉及到硬件、驱动、安全相关,还需要关注HAL和LINUS KERNEL
3、Linux Kernel 层
Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型等等。从上图可以看到,满满的都是Drivers,有一些是为Android特有定制的,是Linux内核的增强:Shared Memory Driver, Binder Driver, Low Memory Killer,Logger 等等,另外一些就是外设特有的Driver和传感器Driver,比如WIFI driver、Bluetooth driver、GPS driver等等
Android里面特有的进程间通信:Binder IPC
做数据采集的人可以深度了解的: Logger,数据采集一般在应用层做就可以了,如果要做到最高效,需要走到最底层
4、HAL(Hardware Abstraction Layer)
HAL的全称是Hardware Abstraction Layer,是Google应硬件厂商的知识产权的保护而提供出来的一个抽象层,这样厂商可以以封闭源代码形式提供硬件驱动模块。这个接口隔离做的真棒。这一层把接口定义好了,不同的厂商可以提供不同的硬件和不同的驱动。层与层之间就隔离了。正因为有这一层的抽象,一个Android 系统可以适配好多个厂商
这一个层次接触比较少
5、Application Framework
看上去有各种各样的Manager,以为事情都是它做的,实际上这些Manager只是一层客户端代理,代理真正的服务提供,比如ActivityManager 是ActivityManagerService在执行,PackageManager是PackageManagerService在执行,WindowManager是WindowsManagerService在执行, ResouceManager对应到ResourceManagerService。当然还有其它好多Service,但是上面几个是最重要的,其中任意一个就可以写一个长篇。
ActivityManagerService Activity启动流程
PackageManagerService
WindowManagerService
ResourceManagerService
这几个位置先留着,以后有机会的时候慢慢写点。
初看这些Service,很像是应用软件开发的时候,业务逻辑层会提供各种各样的Service供展现层调用。有一个大的区别是这些Service是跨进程的调用,一般的应用软件Service和调用都是在同一个进程里面的
6、applications
应用层是一个Android程序员需要精通的地方。一些很重要的从入门到精通的步骤
6.1 跑一个helloword
6.2 搞一搞四大组件,Activity、Service、BroadCastReceiver、ContentProvider
对于应用开发,Activity使用场景比较懂,Service比较少,BroadCastReceiver主要是使用,ContentProvider用的少
对于系统开发,多个应用联合的场景下,对这4个组件都需要有比较深的理解。
6.3 四大组件生命周期
必经之路,尤其是Activity和Service的生命周期,需要把那几张图一看再看
6.4 线程模型
Handler、Looper、MessageQueue、AsyncTask
6.5 内存管理
参见http://blog.csdn.net/vshuang/article/details/39647167
6.6 View的绘制和事件消息派发模型
要做自定义的控件的话,这个是逃不开的坎,onMeasure,onLayout, onDraw
6.8 资源加载
要学习应用的动态加载,对PackageManager和ResourceManager、AssetManager要知道很多
6.9 安全
混淆、签名、https、加密算法,反编译 http://blog.csdn.net/vshuang/article/details/43639211
暂时就想到这些,后面再补充,非常有意思。里面有些要点比较深,需要花很多时间才能慢慢理解,直到运用得比较好
7、结语
梳理了一下自己对于Android系统架构的知识点。看过的书也有好些,初级一点的集中在Application层,高级一点的比如源码解析集中在Application Framework层和对应的Framework Service,也有一些技术内幕集中在讲偏重于Android的kernel层。另外单独的一些技术要点也可以独自成书,比如Android安全方面的书就不少,写Android虚拟机也可以出一本书。
技术永无止境。谨以这篇小文章纪念一下即将过去的2016年。