【读书笔记】深入理解Android内核设计思想

这本书太深了,不适合略读,可以在碰到相关问题时仔细研读,知识覆盖面较广

这么多大块的时间来一条条钻研这些内核实现细节其实不如学习算法来的有用,毕竟一个是形式,一个是内功

留待查阅


印象笔记链接(附带XMind文件)

图片:

深入理解Android 内核设计思想 overview.png

笔记文字

深入理解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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容