init进程通过init.rc中 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
创建一个名叫zygote的新进程(源码目录为frameworks/base/cmds/app_process/app_main.cpp), zygote进程主要调用如下代码
zygote:
//创建Java Runtime
AndroidRuntime::start("com.android.internal.os.ZygoteInit", "start-system-server");
-->startVm //start the virtual machine
-->startReg //Register native function
-->ZygoteInit.main //这里是通过env->CallStaticVoidMethod(startClass, startMeth, strArray)来间接调用的
-->registerZyogteSocket()// Registers a server socket for zygote command connections
-->startSystemServer() //创建一个名叫system_server的系统服务进程
-->Zygote.forkSystemServer() /* Request to fork the system server process , use underlay's fork() to create a new process */
/*等待其它进程发出命令请求
-->if (ZYGOTE_FORK_MODE) { 
runForkMode();
--> while (true) {
pid = Zygote.fork(); /* 创建一个新进程来服务客户端的请求 */
}
  } else {
runSelectLoopMode();
--> while (true) {

}
  }

system_server进程:
当zygote进程通过调用Zygote.forkSystemServer()创建system_server进程后,system_server进程主要调用的代码为

handleSystemServerProcess() //ZygoteInit.java
-->RuntimeInit.zygoteInit()
-->applicationInit()
-->invokeStaticMain(args.startClass, args.startArgs) /* args.startClass ="com.android.server.SystemServer", 这个参数的值是在startSystemServer()函数里定义的参数 */
-->SystemServer.main() //SystemServer.java
-->SystemServer.init1() /*本地方法,本地实现文件为com_android_server_SystemServer.cpp*/
    -->system_init() //system_init.cpp
-->回调SystemServer.init2()
-->new ServerThread("android.server.ServerThread) //创建一个线程来初始化系统的各种服务
-->run() {
//建立一系列的service
eg:Slog.i(TAG, "Power Manager");  
          power = new PowerManagerService();
          ServiceManager.addService(Context.POWER_SERVICE,power);
....
                                        Slog.i(TAG, "Window Manager");
               wm = WindowManagerService.main(context, power,
                       factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,!firstBoot);
                   ServiceManager.addService(Context.WINDOW_SERVICE, wm);
....

}

/* 循环闭合管理框架 */
-->ProcessState::self()->startThreadPool();
-->IPCThreadState::self()->joinThreadPool();

zygote--system_server相关推荐

  1. 【Android】系统启动流程(zygote 进程启动流程)

    前言 先上图,大致了解一下 Android 设备点击电源键开机到创建出 system_server 进程的流程, 里面细化的子流程和 system_server 之后发生的事情我将会在后续的文章中详细 ...

  2. Android中的线程处理

    注:本文来自CSDN博主的一篇文章,个人觉得写得很好,值得借鉴,故收录在此 Android进程模型 在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应 ...

  3. android phone驱动_一文带你掌握 Android 系统架构

    引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...

  4. Android系统架构开篇

    Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...

  5. Android 系统(54)---Android系统开篇

    Android系统开篇[转 学习] 一.引言原网址 Android系统非常庞大.错中复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall ...

  6. android 安全学习从何入手?

    android安全到底如何入手呢?看看一个培训机构的课程介绍,也许给我们一些启发. 里面的每个小节都值得去分析一下. Overview Overview of Android (optional) O ...

  7. Android应用防xposed注入,android hook 框架 xposed 如何实现注入

    转:http://www.cnblogs.com/jiayy/p/4305018.html 前面分析的adbi框架和libinject都是使用so注入的方式,实现将指定代码装入目标进程,这种方式有几个 ...

  8. 整理了一周的Python资料,包含各阶段所需网站、项目,收藏了慢慢来

    引子: 近期突然来了很多朋友,应该是某个朋友推荐了公众号.明哥在此感谢下,谢谢. 这几年大数据,机器学习太火了.而python技术又是这些的开发语言,于是今天推荐下胖哥用心整理的python资料,希望 ...

  9. Android 操作系统架构

    版权声明: 本站所有博文内容均为原创,转载请务必注明作者与原文链接,且不得篡改原文内容. 为便于日常查阅本博客,可通过 Gityuan博客导航 方便检索文章 一.引言 众所周知,Android是谷歌开 ...

  10. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包括安全性,内 ...

最新文章

  1. php 之 在win10-64 上搭建开发环境
  2. CentOS 6.5 搭建NFS文件服务器
  3. vnpy官网说明文档网址
  4. mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
  5. 开发易于移植的J2ME游戏
  6. 若启用该计算机上的无线功能 请使用,无线网络启用后还显示已禁用怎么办_常见问题解析...
  7. stm32 OV7670摄像头模块的介绍以及应用(SCCB的使用)
  8. sublime运行python输出乱码_sublime python出现中文乱码怎么办
  9. ecshop后台首页mysql_ecshop商城后台使用手册
  10. w ndows 10关机快捷键,win10怎么关机 win10关机快捷键大全【图文演示】
  11. 尚硅谷Web前端ES6教程,涵盖ES6-ES11
  12. 海康威视web开发包开发使用说明
  13. 基于镶嵌数据集制作地貌晕眩图
  14. 公积金网厅显示连接服务器错误,住房公积金网厅解决方案
  15. HTML5 中 40 个最重要的技术点
  16. 程序员用代码写合租广告,网友神评亮了
  17. Frida出现process with pid XXXX either refused to load frida-agent, or terminated during injection错误的原因
  18. Web死链扫描神器之LinkChecker
  19. mysql组复制搭建
  20. 国内航班最快明年可实现上网打电话

热门文章

  1. 论文阅读笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
  2. 爬取杂志所有期刊的文章案例
  3. 成本150元的高性能RDP协议瘦客户机
  4. 【安全算法之DES】DES算法(支持ECB/CBC模式)的C语言源码实现
  5. 丹东dns服务器位置,丹东移动dns服务器地址
  6. ncurses安装与下载
  7. php2物镜和ph物镜,奥林巴斯IX53研究级倒置生物荧光显微镜_景通仪器
  8. 2015“泛在测绘与位置大数据应用”国际工程论坛
  9. 2021特种作业操作证继电保护,2021年电工作业考试题库
  10. GSMS软件系统ISO文件刻录教程