根据书中介绍,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通过jni控制service服务程序的简易流程
  2. Android(安卓)Wifi模块分析(三)
  3. Android之菜单总结
  4. Android使用Retrofit进行网络请求
  5. Android官方入门文档[1]创建一个Android项目
  6. android 创建桌面快捷方式 、插件
  7. Android(安卓)Activity的启动
  8. AIR Native Extension的使用(Android)一 : 打包ane
  9. 创建android逐帧动画的两种方式

随机推荐

  1. MySql中 is Null段判断无效和IFNULL()失
  2. MySql关于null的函数使用分享
  3. MySql 如何实现无则插入有则更新
  4. MySQL慢查询以及重构查询的方式记录
  5. 详解MySQL中的pid与socket
  6. MySQL 如何设计统计数据表
  7. 浅谈MySQL 亿级数据分页的优化
  8. 解析MySQL binlog
  9. 详细谈谈MYSQL中的COLLATE是什么
  10. 深入探究Mysql模糊查询是否区分大小写