《系统源码情景分析》第1篇 初识Android系统

Android系统是基于Linux内核来开发的,大致可以划分为五个层次,分别是Linux内核层、硬件抽象层、运行时库层、应用程序框架层和应用程序层。

第1章 准备知识

安卓源码分为2部分,用户空间层源码、内核空间层源码。


第2章 硬件抽象层

《系统源码情景分析》第1篇 初识Android系统_第1张图片
硬件抽象层(Hardware Abstract Layer, HAL)

内核空间以硬件驱动模块的形式来支持,不过它只提供简单的硬件访问通道。而用户空间以硬件抽象层模块的形式来支持,它封装了硬件的实现细节和参数。这样可以保护移动设备厂商的利益。

例:

1). 实现底层内核驱动。

2). 编写硬件抽象层代码调用驱动程序。

3). 实现Framework层Service,用JNI调用硬件抽象层C代码。

4). 编写application,调用Service,实现功能。


第3章 智能指针

引用计数技术:每当有一个新的指针指向了一个对象时,这个对象的引用计数就增加1;相反,每当有一个指针不再指向一个对象时,这个对象的引用计数就减少1;当对象的引用计数为0时,它所占用的内存就可以安全地释放了。

强引用计数与弱引用计数:若2个对象A、B相互引用了。上面简单的引用计数技术就不能解决这个问题了。此时,引入强弱引用计数技术,对象的生命周期只受强引用计数控制。

对象A通过强引用计数来引用对象B,而对象B通过弱引用计数来引用对象A。当对象A不再使用时,由于对象B是通过弱引用计数来引用它的,因此,对象A的生命周期不受对象B的影响,此时对象A可以安全的释放。在释放对象A时,同时也释放它对对象B的强引用计数,因此,当对象B不再使用时,对象B也可以安全地释放了。

由于对象的生命周期不受弱引用计数控制,因此,一方面,当对象B想要使用对象A时,对象A有可能已经被释放了,这个时候对象B不能直接使用对象A,而是先要成功地将对象A的弱引用计数升级为强引用计数,然后才能使用它;另一方面,如果对象B不能将对象A的弱引用计数升级为强引用计数,那么就说明对象A已经被释放了,因此,对象B就不能再使用它。

你可能感兴趣的:(《系统源码情景分析》第1篇 初识Android系统)