杨云君《Android的设计与实现》

杨云君《Android的设计与实现》

作者:杨云君

出版社:机械工业出版社

出版年:2013-5-1

评分:7.6

ISBN:9787111417132

所属分类:网络科技

书刊介绍

内容简介

本书是Android应用开发工程师和Android系统工程师进阶修炼的必读之作。它由资深Android内核专家亲自执笔,从源代码角度,系统、深入、透彻剖析Android系统框架层(Framework)的设计思想和实现原理,为Android应用工程师和系统工程师解决实际工作中的各种难题提供了原理性的指导。为了降低读者的阅读成本,本书使用了大量简单的UML类图和序列图来展示类的层次结构和方法的调用流程,使读者能迅速读完本书并领会其精髓!

“Android的设计与实现”系列丛书主要围绕Android系统的四层结构展开,通过源代码来分析各层的设计思想与实现原理,卷I则主要是针对Framework(框架层)的。全书共12章,分为六个部分:基础篇(第1~2章)详细讲解了Android的体系结构、源代码阅读和调试环境的搭建,以及整个框架的基础;启动篇(第3~4章)深入分析了Android启动过程的机制和实现原理,能帮助读者全面理解框架层系统服务的运行基础;Binder篇(第5~6章)着重分析了Binder在Native框架层和Java框架层的机制和实现,能让读者深入理解进程间的通信模型;消息通信篇(第7章)重点分析了Android的消息驱动和异步处理机制,能让读者深入理解线程间的通信模型;Package Manager篇(第8~9章)主要讲解了Package Manager的机制与实现,以及APK的安装方法与过程;Activity Manager篇(第10~12章)深入阐述了ActivityManagerService的运行机制、应用程序和进程的启动流程,以及进程管理机制。

本书适合中高级的Android应用开发工程师、Android系统开发工程师、Android系统架构师,以及负责对Android系统进行调试和优化的工程师们阅读。

作品目录

前言

第一部分 基础篇

第1章 Android体系结构及源代码阅读环境搭建 / 2

1.1 Android发展过程 / 2

1.2 Android体系结构 / 3

1.2.1 静态视角的体系结构 / 3

1.2.2 动态视角的体系结构 / 7

1.3 Android源码下载和编译 / 8

1.3.1 搭建开发环境 / 8

1.3.2 下载Android上层系统源代码 / 9

1.3.3 下载指定模块源码 / 10

1.3.4 下载 Android Linux Kernel源码 / 11

1.3.5 编译Android上层系统源码 / 12

1.3.6 编译指定模块源码 / 12

1.4 Android源码结构 / 14

1.5 Android源码开发工具的配置和使用 / 15

1.5.1 配置Android SDK / 15

1.5.2 用Eclipse开发和调试源代码 / 16

1.5.3 用Source Insight阅读源代码 / 19

1.6 NDK开发环境配置 / 20

1.7 本章小结 / 21

第2章 框架基础JNI / 22

2.1 JNI在Android系统中所处的位置 / 22

2.2 JNI框架层实例分析 / 23

2.2.1 Log系统Java层分析 / 24

2.2.2 Log系统的JNI层 / 24

2.2.3 Log系统的JNI方法注册 / 25

2.3 JNI总管:JNIEnv / 27

2.4 在Java中调用JNI实现方法 / 29

2.4.1 Java数据类型与JNI数据类型转换 / 29

2.4.2 JNI方法命名规则 / 30

2.4.3 JNI方法签名规则 / 31

2.5 JNI操作Java对象 / 32

2.5.1 访问Java对象 / 32

2.5.2 操作成员变量(域)和方法 / 33

2.5.3 全局引用、弱全局引用和局部引用 / 34

2.6 JNI异常处理 / 36

2.7 JNI应用层实例分析 / 38

2.7.1 Java层分析 / 38

2.7.2 JNI层代码和异常处理 / 39

2.8 本章小结 / 42

第二部分 启动篇

第3章 Android启动过程的底层实现 / 44

3.1 Android正常模式启动流程 / 44

3.2 Kernel启动过程 / 44

3.2.1 内核引导阶段 / 45

3.2.2 内核启动阶段 / 46

3.3 init进程的执行过程 / 49

3.4 init.rc文件解析过程 / 53

3.4.1 Android初始化语言 / 53

3.4.2 init.rc的内容 / 56

3.4.3 解析配置文件 / 57

3.4.4 解析Service / 60

3.4.5 解析Action / 63

3.5 触发并启动Action和Service / 65

3.5.1 触发Action / 65

3.5.2 执行Action / 66

3.5.3 启动Service / 70

3.5.4 init对属性服务的处理 / 71

3.6 init循环监听处理事件 / 75

3.7 本章小结 / 77

第4章 Android 启动过程的上层实现 / 78

4.1 第一个Dalvik虚拟机zygote / 79

4.1.1 zygote的配置 / 79

4.1.2 如何执行zygote服务程序 / 80

4.2 ZygoteInit的启动过程 / 82

4.2.1 创建Dalvik虚拟机 / 83

4.2.2 注册JNI方法 / 85

4.2.3 开启Java世界 / 88

4.3 ZygoteInit开启Java世界的五部分工作 / 89

4.3.1 注册zygote的Socket / 89

4.3.2 预加载Class资源和Resource资源 / 89

4.3.3 启动system_server进程 / 92

4.3.4 执行MethodAndArgsCaller的run方法 / 98

4.3.5 执行runSelectLoopMode方法 / 102

4.4 zygote处理Home启动请求 / 104

4.5 本章小结 / 112

第三部分 Binder篇

第5章  Binder在Native框架层的实现 / 114

5.1 Binder与C/S体系结构概述 / 114

5.2 servicemanager进程的启动过程 / 115

5.2.1 初始化Binder通信环境 / 116

5.2.2 注册上下文管理者 / 118

5.2.3 等待接收并处理IPC通信请求 / 120

5.3 Server的启动和Service的注册过程 / 128

5.3.1 创建ProcessState对象 / 129

5.3.2 获取servicemanager的代理对象 / 131

5.3.3 注册Service / 139

5.3.4 Server进程开启线程池 / 145

5.4 Client端使用服务代理对象 / 146

5.5 服务代理与服务通信 / 149

5.6 本章小结 / 152

第6章 Binder在Java框架层的实现 / 153

6.1 Java系统服务的创建过程 / 153

6.1.1 创建JavaBBinderHolder对象 / 155

6.1.2 JavaBBinder的作用 / 156

6.1.3 gBinderOffsets结构体解析 / 156

6.2 Java系统服务的注册过程 / 159

6.2.1 调用BinderInternal.getContextObject方法 / 160

6.2.2 调用ServiceManagerNative.asInterface方法 / 165

6.2.3 调用ServiceManagerProxy. addService方法注册服务 / 167

6.3 Client端获取服务代理 / 169

6.3.1 获取服务的BinderProxy / 170

6.3.2 构造服务的Proxy对象 / 172

6.3.3 构造服务管理者对象 / 173

6.4 Client端调用Java系统服务的方法 / 174

6.5 统一的通信接口AIDL / 177

6.5.1 AIDL实例 / 177

6.5.2 AIDL语法 / 180

6.5.3 处理自定义数据类型的传递 / 181

6.6 本章小结 / 182

第四部分 消息通信篇

第7章 线程消息通信与异步处理 / 184

7.1 什么是Looper线程 / 184

7.2 第一步:Looper线程准备阶段 / 185

7.2.1 创建Java层的Looper对象 / 186

7.2.2 创建Java层的MessageQueue对象 / 186

7.2.3 创建Native层的NativeMessage-Queue和Looper对象 / 187

7.2.4 NativeMessageQueue关联到MessageQueue / 189

7.3 第二步:创建消息处理器并发送消息 / 190

7.3.1 Handler的创建和初始化 / 190

7.3.2 Message的创建和初始化 / 191

7.3.3 消息的发送过程 / 192

7.4 第三步:Looper线程循环阶段 / 198

7.4.1 记录并获取当前线程身份信息 / 198

7.4.2 循环监听消息 / 199

7.4.3 分发消息到处理器 / 205

7.4.4 回收消息并更新消息池 / 209

7.5 异步任务类AsyncTask / 210

7.5.1 AsyncTask的实现 / 211

7.5.2 AsyncTask的执行 / 214

7.6 本章小结 / 223

第五部分 Package Manager篇

第8章 Package Manager 的机制与实现 / 226

8.1  Package Manager体系结构 / 227

8.1.1 三层体系结构 / 227

8.1.2 三层之间的关系 / 228

8.2 PackageManagerService的启动过程 / 231

8.2.1 创建并初始化Settings对象 / 232

8.2.2 获取系统默认配置 / 236

8.2.3 启动PackageHandler / 237

8.2.4 创建data目录并初始化UserManager / 239

8.2.5 解析系统permission和feature信息 / 242

8.2.6 解析packages文件 / 245

8.2.7 dexopt优化判定 / 247

8.2.8 启动FileObserver监控APK文件的目录 / 250

8.2.9 调用scanDirLI方法扫描并安装APK包 / 252

8.2.10 更新packages文件 / 253

8.3 PackageManagerService启动过程使用的核心组件 / 254

8.3.1 Java层的Installer / 255

8.3.2 Installd中的命令 / 258

8.4 本章小结 / 260

第9章 APK的安装过程 / 261

9.1 通过scanDirLI方法安装APK / 261

9.1.1 创建PackageParser / 262

9.1.2 解析AndroidManifest.xml文件 / 263

9.1.3 过滤PackageParser.Package类型的pkg对象 / 270

9.1.4 解析和安装pkg / 274

9.2 使用adb命令安装应用程序 / 282

9.2.1 通过消息机制安装指定的APK / 283

9.2.2 调用handleStartCopy方法处理安装操作 / 286

9.2.3 调用handleReturnCode方法处理返回结果 / 290

9.3  本章小结 / 293

第六部分 Activity Manager篇

第10章 Activity Manager的机制与实现 / 296

10.1 Activity Manager概述 / 296

10.2 ActivityManagerService在系统启动阶段的主要工作 / 297

10.3 第一阶段:启动ActivityManagerService / 299

10.3.1 启动AThread线程 / 300

10.3.2 创建ActivityThread对象 / 302

10.3.3 创建ActivityStack类 / 309

10.3.4 调用startRunning方法 / 310

10.4 第二阶段:调用setSystemProcess方法 / 310

10.4.1 查询并处理ApplicationInfo / 312

10.4.2 创建并初始化ProcessRecord / 313

10.5 第三阶段:调用install-SystemProviders方法 / 315

10.5.1 查询Content Provider / 316

10.5.2 安装Content Provider / 317

10.6 第四阶段:调用systemReady方法 / 323

10.6.1 发送ACTION_PRE_BOOT_COMPLETED广播 / 323

10.6.2 清理预启动的非persistent进程 / 325

10.6.3 读取Settings配置 / 326

10.6.4 运行Runnable回调接口 / 327

10.6.5 启动persistent应用程序和Home / 328

10.7 本章小结 / 329

第11章 应用程序Activity的启动和调度 / 330

11.1 启动应用程序Activity时在Client端的执行流程 / 330

11.2 启动应用程序Activity时在Server端的执行流程 / 334

11.2.1 预启动 / 334

11.2.2 暂停 / 348

11.2.3 启动应用程序进程 / 356

11.2.4 加载应用程序Activity / 362

11.2.5 显示Activity / 369

11.2.6 Activity Idle状态的处理过程 / 379

11.2.7 停止源Activity / 382

11.3 本章小结 / 387

第12章 Activity Manager进程管理 / 388

12.1 LRU weight机制 / 388

12.2 OOM adj机制 / 391

12.2.1 更新OOM adj值 / 392

12.2.2 OOM adj的计算过程 / 403

12.3 Low Memory Killer机制 / 414

12.3.1 OOM adj等级和最小内存阈值 / 414

12.3.2 LM Killer机制的实现 / 417

12.4 本章小结 / 419

相关推荐

微信二维码