深入理解Android

邓凡平

出版时间

2011-09-05

ISBN

9787111357629

评分

★★★★★
书籍介绍

《深入理解Android:卷I》是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。

全书共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android中极为重要的Binder进行了较为全面的分析,深刻揭示了其本质。第7章对Audio系统进行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。第8章深入讲解了Surface系统的实现原理,分析了Surface与Activity之间以及Surface与SurfaceFlinger之间的关系、SurfaceFlinger的工作原理、Surface系统中的帧数据传输以及LayerBuffer的工作流程。第9章对Vold和Rild的原理和机制进行了深入的分析,同时还探讨了Phone设计优化的问题;第10章分析了多媒体系统中MediaScanner的工作原理。

本书适合有一定基础的Android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题。

AI导读
核心看点
  • 以情景方式深入剖析Android源码
  • 重点解析Framework层及Binder机制
  • 兼顾Native层与Application层分析
适合谁读
  • Android系统开发者与框架研究者
  • 希望深入理解底层原理的进阶程序员
  • 对JNI、Binder及启动流程感兴趣的读者
读前提醒
  • 需具备扎实的Java与C/C++基础
  • 部分内容基于旧版本,需结合新系统
  • 建议配合实际源码阅读以加深理解
读者共识
  • 源码剖析透彻,是理解Android底层的佳作
  • 偏向底层系统,普通应用开发者慎入
  • 部分章节略显枯燥,需耐心研读

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "在分析zygote创建虚拟机的时候,我们说过系统默认设置的Java虚拟机堆栈最大为16MB"
  • "JNI是Java Native Interface的缩写,中文译为“Java本地调用”。"
  • "通俗地说,JNI是一种技术,通过这种技术可以做到以下两点: * Java程序中的寒暑可以调用Native语言系的函数,Native一般指的是C/C++编写的函数。 * Native程序中的函数可以调用Java层的函数,也就是说在C/C++程序中可以调用Java的函数。"
  • "图1-2 Java世界和Native世界交互"
  • "一般而言,Java世界经由JNI层通过IPC方式与Native世界交互,而Android平台上最为神秘的IPC方法就是Binder了,第6章将详细分析Binder。"
  • "需要解释一下静态方法中native函数是如何找到对应的JNI函数的。其实,过程非常简单: 当Java层调用native_init()函数时,它会从对应的JNI库中寻找Java_android_media_MediaScanner_native_init函数,如果没有,就会报错。如果找到,则会为这个native_init和Java_android_media_MediaScanner_native_init建立一个关联关系,其实就是保存JNI层函数的函数指针。以后再调用native_init函数时,直接使用这个函数指针久可以了,当然这项工作是由虚拟机完成的。"
  • "jclass clazz = (*env)->FindClass(env, className);"
  • "jclass mediaScannerClientInterface = env->FindClass("android/media/MediaScannerClient");"
作者简介
邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的Android企业,负责Framework的开发和维护。乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。
目录
第1章 阅读前的准备工作 / 1
1.1 系统架构 / 2
1.1.1 Android系统架构 / 2
1.1.2 本书的架构 / 3
1.2 搭建开发环境 / 4

显示全部
用户评论
值得一看: - 系统native到java层的初始化 - binder - surface 如果从事音视频相关的工作,audio和mediascanner这两章对于这一类岗位较为有用。 该书作者的文章绝大部分很多是水文,给Android中级工程师较为合适,高级工程师不建议看。而且很多文章都是来源于博客,没有经过再次打磨,所以对于高级工程师难免难以解困。
我... 嗯,好吧,其实没看明白,感觉很高深的样子。因为现在用不上,所以先把知识点混个脸熟... 嗯,好吧,脸熟都没有,就算见过了有点印象。
适合喜欢读Android源码的人
大致理解Android系统底层的架构,强烈推荐!IPC通信的Binder机制设计太巧妙了,还要继续 深入研究!
222
优点:通俗易懂 缺点:图比较少
jni的章节读完有收获
极客学院wiki.jikexueyuan.com20190226-20190508第一遍,了解了个大概20190509-第二遍
都是源码分析,太细节了
下载
收藏