掌握 Android 系统架构,看这一篇就够了!( 二 )

2.4 Framework层

  • Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
  • 加载ZygoteInit类,注册Zygote Socket服务端套接字
  • 加载虚拟机
  • 提前加载类preloadClasses
  • 提前加载资源preloadResouces
  • System Server进程,是由Zygote进程fork而来,SystemServer是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务 。
  • Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务 。
2.5 App层
  • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
  • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上 。
  • 所有的App进程都是由Zygote进程fork生成的 。
2.6 Syscall && JNI
  • Native与Kernel之间有一层系统调用(SysCall)层,见Linux系统调用(Syscall)原理;
  • Java层与Native(C/C++)层之间的纽带JNI,见Android JNI原理分析 。
通信方式
无论是Android系统,还是各种Linux衍生系统,各个组件、模块往往运行在各种不同的进程和线程内,这里就必然涉及进程/线程之间的通信 。对于IPC(Inter-Process Communication, 进程间通信),Linux现有管道、消息队列、共享内存、套接字、信号量、信号这些IPC机制,Android额外还有Binder IPC机制,Android OS中的Zygote进程的IPC采用的是Socket机制,在上层system server、media server以及上层App之间更多的是采用Binder IPC方式来完成跨进程间的通信 。对于Android上层架构中,很多时候是在同一个进程的线程之间需要相互通信,例如同一个进程的主线程与工作线程之间的通信,往往采用的Handler消息机制 。
想深入理解Android内核层架构,必须先深入理解Linux现有的IPC机制;对于Android上层架构,则最常用的通信方式是Binder、Socket、Handler,当然也有少量其他的IPC方式,比如杀进程Process.killProcess()采用的是signal方式 。下面说说Binder、Socket、Handler:
3.1 Binder
Binder作为Android系统提供的一种IPC机制,无论从系统开发还是应用开发,都是Android系统中最重要的组成,也是最难理解的一块知识点,想了解为什么Android要采用Binder作为IPC机制? 可查看我在知乎上的回答(https://www.zhihu.com/question/39440766/answer/89210950) 。深入了解Binder机制,最好的方法便是阅读源码,借用Linux鼻祖Linus Torvalds曾说过的一句话:Read The Fucking Source Code 。下面简要说说Binder IPC原理 。
Binder IPC原理
Binder通信采用c/s架构,从组件视角来说,包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统中的各种服务 。
掌握 Android 系统架构,看这一篇就够了!

文章插图
 
想进一步了解Binder,可查看Binder系列—开篇(http://gityuan.com/2015/10/31/binder-prepare/),Binder系列花费了13篇文章的篇幅,从源码角度出发来讲述Driver、Native、Framework、App四个层面的整个完整流程 。根据有些读者反馈这个系列还是不好理解,这个binder涉及的层次跨度比较大,知识量比较广,建议大家先知道binder是用于进程间通信,有个大致概念就可以先去学习系统基本知识,等后面有一定功力再进一步深入研究Binder机制 。
Binder原理篇(具体文章地址可详见:http://gityuan.com/android/)
序号文章名概述0Binder系列—开篇Binder概述1Binder系列3—启动Service ManagerServiceManager守护进程 注册和查询服务2Binder系列4—获取Service Manager获取代理对象BpServiceManager3Binder系列5—注册服务(addService)注册Media服务4Binder系列6—获取服务(getService)获取Media代理,以及DeathRecipient5Binder系列7—framework层分析framework层服务注册和查询,Binder注册6理解Binder线程池的管理Binder的startThreadPool过程7彻底理解Android Binder通信架构startService为主线8Binder系列10—总结Binder的简单总结9Binder IPC的权限控制clearCallingIdentity/restoreCallingIdentity10Binder死亡通知机制之linkToDeathBinder死亡通知机制
Binder驱动篇:
1Binder Driver初探驱动open/mmap/ioctl,以及binder结构体2Binder Driver再探Binder通信协议,内存机制
Binder使用篇:
1如何使用BinderNative层、Framwrok层自定义Binder服务2如何使用AIDLApp层自定义Binder服务
3.2 Socket
Socket通信方式也是C/S架构,比Binder简单很多 。在Android系统中采用Socket通信方式的主要有: