概要
《深入理解Android卷1》这本书在刚出来的时候就已经买了,当时应该也是看过的,但忘得很快,里面很多的源码分析,
且多数是native层的,虽然作者也会在分析完一段时间后就做一个总结。最近又把他拿出来看了看,这次看的时候,已经
对Android体系有一个认识了,所以理解起来还算好。但对于native层的点,光看这一本书是远远不够的。
还是将一些自己觉得重要的点都记录下来吧!
个人觉得本书的阅读顺序应该是:
- 第一章了解Android系统的架构
- 熟悉JNI,了解Java跟native通讯的机制
- 第三、四章,了解Android启动流程
- 第五章了解线程通信机制Handler
- 六、七章以源码的角度来熟悉Binder机制,这里我觉得一定要扩展阅读,光看这些很难深入理解Binder
- 理解Surface系统,阅读这章最好能先熟悉四大组件的启动流程,UI绘制流程,事件传递机制
- 剩下的两章算扩展吧
第一章
介绍了整个Android体系,从底层的硬件设备到上面的应用层。
具体的可以参考Android系统架构
第二章
JNI是Java Native Interface的缩写,通过JNI可以做到:
- Java程序中的函数可以调用Native语言写的函数
- Native程序中的函数可以调用Java层的函数
我们在Java中调用C、C++代码的一般做法是使用System.loadLibrary(“xxx.so”),然后声明native方法,即可使用。
在Android中,JNI函数有两种注册方式:
静态方法
- 编写java文件,编译生成.class文件
- 使用javah命令,比如javah -o ouput packagename.classname,会生成一个output.h的头文件,里面会有对应的JNI层函数
动态注册
由于是不同语言之间的调用,每种语言的基本类型有所差异,所以JNI会进行类型转换。
JNI提供三种类型的引用:
- Local Reference:本地引用。一旦JNI层函数返回,这些jobject就可能被垃圾回收
- Global Reference:全局引用,不主动释放,就不会被回收
- Weak Global Reference: 弱全局引用
第三章、第四章
大致流程:
- 开机,初始化zygote(app_process)进程
- 创建虚拟机
- 注册JNI函数
- 注册zygote用的socket,用于跟system_server进程通信
- 预加载资源(比如加载Android相关的java类、so库)
- 启动system_server进程
- 初始化ams、wms、pms等等
第五章
RefBase、sp、wp实现了一套通过引用计数的方法控制对象生命周期的机制。这一块看得有点懵,因为C、C++中是没有
垃圾回收机制的,需要自己手动释放对象。这几个东西应该是为了方便对象释放而设计出来的吧?
介绍了一些同步类,这块如果对Java的锁机制有了解的话,看起来很轻松。
- Mutex:互斥锁
- AutoLock:Mutex的封装
- Condition:条件锁
接下来讲Looper和Handler,可以参考Handler原理
第八章
个人觉得这章很重要,可以让你了解整个绘制的流程和内部实现机制。