根据书中介绍,Android就是一个类Linux的系统,先分析Android的启动,Android启动刚开始跟Linux启动一样,就是boot跟着Linux内核,跟着就是开始了Linux的用户空间进程的启动,下面就开始跟着系统的启动过程,跟着书本学习。

Init就是系统中用户空间的第一个进程,它的进程号就是1,init进程作为天字第一号进程,有很多重要的功能:

解析init.rc和init.**.rc,完成init.rc提供的动作

创建java世界的开创者zygote,

初始化Android系统的属性,加载Android系统的属性服务

Zygote进程的名字是后来换了的,刚开始进程名称叫做app_process,所以Zygote的native入口函数在app_main.cpp中

我们来看下Zygote是怎么成为java世界的创建者的,Zygote的main函数的大部分工作都是AndroidRuntime的start函数来实现的,这里创建了java世界。

创建虚拟机--startVm

为这个虚拟机注册需要的jni函数

通过jni调用之后就进入了java世界,不调用就不用回到native世界

那我们来看java世界的入口,在zygoteinit.java的main,

建立ipc通信服务端,registerZygoteSocket这里没有用到binder,用的是socket通信

预加载类和资源,都是Androidframework中的

通过fork启动system_server进程,这个进程是framework的核心,如果它dead了,Zygote就会dead掉。

system_server启动完成后,成为一个独立的进程,Zygote就进入循环接收客户端socket的通信(谁是客户端呢)

surfaceFlinger服务在system_server进程中被创建。

system_server进程创建了一个线程,来启动系统的各项服务,如电源管理,电池管理,看门狗,windowmanager等

通过分析ActivityManagerService来看Zygote怎么接收消息,并处理请求的

AMS也是由SystemServer创建的,是创建管理activity的过程。

AMS启动一个activity,是SystemServer通过Zygote的那个socket先给Zygote发送一个消息

Zygote一个在等待消息的状态,获取到消息后通过fork又创建了一个子进程,Zygote继续等待消息

Android系统的看门狗watchdog

Android用看门狗看几个重要的Service,一旦发现Service除了问题,就杀掉SS,进而Zygote也会自杀,之后java世界重启

ActivityManagerService PowerManagerService WindowManagerService受看门狗监控

更多相关文章

  1. android 如何调用系统拨打电话的功能
  2. frameworks中增加自定义服务使其也成为系统服务
  3. Android系统开发01—Android基本组件
  4. Linux/Android——Input系统之InputMapper 处理 (八)
  5. [置顶] android 进程的优先级
  6. [Android实例] 基于android的远程视频监控系统
  7. Android的图表世界–如何使用MPAndroidChart
  8. Android存储系统之架构篇

随机推荐

  1. android之针对fragment多次调用onCreateV
  2. uses-sdk
  3. retrofit2+RxJava简单使用
  4. Android library projects cannot be lau
  5. android下的android.os.StrictMode$Andro
  6. Android 官方文档:(二)应用清单 —— 2.2 <a
  7. android打印
  8. Android高手进阶教程(二十七)之---基于Vi
  9. android 调用照相功能
  10. Browser设置为桌面版