这本书太深了,不适合略读,可以在碰到相关问题时仔细研读,知识覆盖面较广
这么多大块的时间来一条条钻研这些内核实现细节其实不如学习算法来的有用,毕竟一个是形式,一个是内功
留待查阅
图片:
笔记文字
深入理解Android内核思想
1 4 操作系统基础
1.1 4.3 进程间通信的经典实现
1.1.1 共享内存
1.1.2 管道pipe
1.1.2.1 管道是单向的
1.1.2.2 有容量限制
1.1.3 Unix domain socket
1.1.3.1 专门针对单机的进程间通信,并不依赖Network socket 的那些TCP/IP协议
1.1.3.2 Android上使用最多的一种IPC机制是Binder,其次就是UDS
1.1.4 RPC(Remote Procedure Calls)
1.2 4.4 同步机制的经典实现
1.2.1 定义
1.2.1.1 如果多个进程间存在时序关系,需要协同工作以完成一项任务,则称为同步
1.2.1.2 如果它们并不满足协同条件,而只是因为共享具有排他性资源时所产生的关系,称为互斥
1.2.2 信号量(Semaphore)
1.2.2.1 信号量与PV原语操作 是使用最广泛的互斥方法之一
1.2.2.2 PV原语都属于原子操作(Atomic Operations)
1.2.3 Mutex(Mutual Exclusion)
1.2.4 管程(Monitor)
1.2.4.1 对Semaphore机制的延伸和改善,是一种控制更为简单的同步手段
1.2.4.2 管程中的方法都是受Mutex保护的,意味着同一时刻只允许有一个访问者使用它们
1.3 4.5 Android中的同步机制
1.3.1 Mutex
1.3.2 Condition
1.3.3 Barrier
1.3.3.1 Barrier是填充了具体条件的Condition
1.3.3.2 专门为SurfaceFlinger而设计
1.4 4.6 操作系统内存管理基础
1.4.1 核心点:虚拟内存、内存分配与回收、内存保护
1.4.2 虚拟内存
1.4.2.1 地址空间
1.4.2.1.1 逻辑地址,也称相对地址,是程序编译后所产生的地址
1.4.2.1.1.1 组成部分: Segment Selector + Offset
1.4.2.1.2 线性地址
1.4.2.1.3 物理地址
1.4.3 内存保护
1.4.4 内存分配与内存回收
1.4.5 进程间通信mmap
1.5 4-7 Android中的Low Memory Killer
1.5.1 OOMKiller
1.5.2 策略考虑因素
1.5.2.1 进程消耗的内存
1.5.2.2 进程占用的CPU时间
1.5.2.3 oom_adj(OOM权重)
1.5.3 自己改变oom_adj?
1.5.3.1 1 写文件 : /proc/<PID>/oom_adj
1.5.3.2 2 android:persistent 添加到application标签中,设置应用为常驻内存
1.6 4-8 Android 匿名共享内存
1.6.1 Anonymous Shared Memory
1.6.2 Ashmem 设备
1.6.2.1 创建时机
1.6.2.2 操作函数及实现原理
1.6.2.3 Linux 共享机制的区别与联系
1.6.3 Ashmem应用实例
1.7 4-9 JNI
2 5 Android 进程/线程管理
2.1 5.1 Android进程和线程
2.1.1 Activity启动后,除了主线程 ActivityThread之外还需要两个Binder线程
2.1.2 Service与Activity一样,也寄存于ActivityThread之中,并且启动流程和Activity基本一致
2.1.3 启动Service时,同样也需要两个Binder线程支持
2.1.4 对于同一个AndroidManifest.xml中定义的四大组件,除非有特别声明,否则它们都运行于同一个进程中
2.1.5 Android提供了特殊的方式让不是同一个包里的组件也可以运行于相同的进程中,优势是可以方便地进行资源共享
2.1.5.1 针对个别组件,可以在标签中加入android:process
2.1.5.2 针对整个包,直接在<application>标签中加入android:process属性来指明
2.2 5.2 Handler, MessageQueue Runnable, Looper
2.2.1 Handler
2.2.1.1 功能:处理Message、将Message压入MessageQueue
2.2.1.2 函数
2.2.1.2.1 post
2.2.1.2.1.1 post
2.2.1.2.1.2 postAtTime
2.2.1.2.1.3 postDelay
2.2.1.2.2 send
2.2.1.2.2.1 sendEmptyMessage
2.2.1.2.2.2 sendMessageAtFrontOfQueue
2.2.1.2.2.3 sendMessageAtTime
2.2.1.2.2.4 sendMessageDelay
2.2.2 MessageQueue
2.2.3 Looper
2.2.3.1 分为两种:主线程、普通线程
2.2.3.2 ThreadLocal 成员变量
2.3 5.3 UI主线程——ActivityThread
2.3.1 prepareMainLooper
2.3.1.1 prepare
2.3.1.2 不允许退出
2.3.2 sMainThreadHandler
2.3.2.1 创建处理消息环境
2.3.2.2 循环处理消息
2.4 5.4 Thread类
2.4.1 内部原理
2.4.1.1 implements Runnable
2.4.1.2 state
2.4.1.2.1 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED
2.4.2 休眠和唤醒
2.4.2.1 相关方法:wait,notify,notifyAll, interrupt,join, sleep
2.4.2.2 wait和notify/notifyAll
2.4.2.3 interrupt
2.4.2.4 join
2.4.2.4.1 保证两个线程顺序执行
2.4.2.4.2 带时间参数的join,保证在规定时间没有执行完前面的线程,也会继续执行后面的语句,防止无限等待
2.4.2.5 sleep
2.4.2.5.1 wait等待某个object
2.4.2.5.2 sleep则是等待时间
3 6. 进程间通信——Binder
3.1 组成
3.1.1 Binder驱动
3.1.2 Service Manager
3.1.2.1 在Binder通信中的唯一标志永远都是0
3.1.3 Binder Client
3.1.4 Binder Server
3.2 智能指针
3.2.1 引用计数器,由object自身持有
3.2.2 强指针SP
3.2.3 弱指针WP,主要使命是解决循环引用的问题
3.2.3.1 弱指针必须升级为强指针才能访问它所指向的对象
3.3 进程间的数据传递载体——Parcel
3.4 Binder 驱动协议
3.5 ServiceManager[Binder Server]
3.5.1 类似“DNS”服务器
3.6 Binder Client
3.7 Android接口描述语言AIDL
3.8 匿名Binder Server
4 7. Android启动过程简析
4.1 第一个系统进程 init
4.2 系统关键服务的启动简析
5 8. 管理Activity和组件运行状态的系统进程 Activity Manager Service(AMS)
5.1 AMS功能概述
5.1.1 寄存于SystemServer中。会在系统启动时创建一个线程来循环处理客户请求
5.2 ActivityStack
5.2.1 ActivityState
5.2.2 ArrayList
5.2.3 记录特殊状态下的Activity
5.3 startActivity流程
5.4 ActivityTask
5.4.1 android:taskAffinity
5.4.1.1 当启动Activity的Intent中带有FLAG_ACTIVITY_NEW_TASK标志时
5.4.1.1.1 表示它希望为activity新开一个task, 如果有task的affinity与新Activity的affinity一样,则会复用此task,否则,新建task
5.4.1.2 当Activity中的allowTaskReParenting属性设置为true时
5.4.1.2.1 Activity具有动态转移能力
5.4.2 android:alwaysRetainTaskState
6 9. GUI系统之SurfaceFlinger
7 11. View体系
7.1 应用程序中的View框架
7.1.1 ViewRoot是View的管理者,ViewRoot的核心任务就是与WindowManagerService进行通信
7.1.2 Activity内部有一个mWindow成员变量
7.1.3 Window与WindowManagerImpl的关系
7.1.3.1 一个应用可能有很多个Window,不会让它们单独地与WMS通信
7.1.4 ViewRoot与WindowManagerImpl的关系
7.2 Activity中ViewTree的创建过程
7.2.1 有了Window以后生成具体的内容由setContentView发起,设置mDecor
7.3 在WMS中注册窗口
7.4 ViewRoot的基本工作方式
7.5 ViewTree的遍历时机
7.6 ViewTree的遍历流程
7.7 View 和 ViewGroup属性
7.8 Canvas
7.9 draw和onDraw
7.10 View中的消息传递
7.11 View动画
8 12. InputManager Service与输入事件
8.1 事件分类
8.1.1 KeyEvent
8.1.2 TouchEvent
8.1.3 MouseEvent
8.1.4 TrackBallEvent
8.2 事件的投递流程
9 13. 音频系统
9.1 基础
9.2 框架
9.3 核心
9.4 策略制定者
9.5 回放
9.6 数据流
9.7 音量控制
9.8 上层建筑
9.9 支持的格式
9.10 ID3简介
9.11 多媒体文件管理
10 14. Intent匹配规则
10.1 Intent 属性
10.2 匹配规则
10.3 源码简析
11 15. APK应用程序的资源适配
11.1 资源类型
11.2 可选资源
11.3 最佳匹配流程
11.4 屏幕适配
12 16. Android字符编码格式
12.1 ISO/IEC 8859
12.2 ISO/IEC 10646
12.3 Unicode
12.4 String类型
13 17. Android和OpenGL ES
13.1 3D 基础
13.2 OpenGL SE
13.3 API-EGL
13.4 GLSurfaceView
14 18. SystemUI
14.1 组成元素
14.2 实现
14.3 壁纸
15 19. Widget
15.1 AppWidgetProvider
15.2 AppWidgetHost
16 20. 编译和打包
16.1 Ant
16.2 命令行
16.3 编译过程
16.4 信息安全
16.5 签名
16.6 签名源码
17 21. 版本控制
17.1 Git
18 22. 调试工具
18.1 Emulator
18.2 ADB