一、Zygote是什么

1. Zygote进程由init进程启动,用于创建孵化新进程,运行应用程序。

2. Zygote进程共享已运行的Davlik虚拟机资源,缩短新应用程序运行所耗费时间。

3. Zygote会事先将应用程序要使用的Android Framewok中的类与资源加载到内存中,形成资源链接信息,

新运行的Android应用程序不必重新形成资源的链接信息,节省大量时间,提高运行效率。

二、由app_process运行ZygoteInit class

1. Zygote由JAVA编写,不能直接由init进程启动,想运行Zygote类,先生成Dalvik虚拟机,

再在Dalvik虚拟机上装载运行ZygoteInit类,这一任务由app_process进程执行。

2. Zygote启动过程

(1)app_process main函数中生成AppRuntime对象,用于初始化并运行Dalvik虚拟机。

(2)调用AppRuntime对象的main方法。

(3)创建Dalvik虚拟机,注册虚拟机要使用的JNI函数。

(4)AppRuntime根据app_process传入的参数,找到并运行ZygoteInit类,此时程序的执行转到虚拟机中运行的Java应用程序上。

AppRuntime此后的C++代码执行流会一直等待,直到虚拟机终止运行。

3. ZygoteInit类的功能

(1)绑定/dev/socket/zygote套接字,从ActivityManager接收新Android应用程序的生成请求。

该套接字在系统启动过程中由init进程根据init.rc生成。

应用程序Framework使用套接字文件描述符创建LocalServerSocket类的实例,并将其与/dev/socket/zygote绑定在一起。

当创建一个新Android进程的请求到达ZygoteInit对象时,LocalServerSocket会接收到生成新Android进程的信息。

(2)加载应用程序Framework中的类与平台资源

将Framewokr中的类,图标,图像,字符串等资源加载到内存中并生成链接信息。

图标例如checkbox等。

(3)运行SystemServer

Zygote启动Dalvik虚拟机后,会再生成一个Dalvik虚拟机实例,以便运行SystemServer的Java服务,

在运行完AudioFlinger与SurfaceFlinger本地服务后,SystemServer开始运行Framework中的服务如ActivityManager等。

(4)运行新Android应用程序

SystemServer运行后,程序进入一个循环,处理来自绑定的套接字的请求,直到Zygote进程终止。

如果收到创建新应用程序的命令,会调用Zygote.forkAndSpecialize,创建新进程,并根据传入的参数,设置uid, gid等。

Android框架揭秘-Zygote笔记相关推荐

  1. Android之内核学习笔记

    0.Android系统启动 <Android系统启动流程 -- bootloader> <The Android boot process from power on> < ...

  2. 安卓巴士专家讲堂二十一期:揭秘Android框架层核心模块

    论坛地址: http://www.apkbus.com/android-121872-1-1.html 试读地址:http://www.apkbus.com/android-121004-1-1.ht ...

  3. 《Android安全技术揭秘与防范》—第8章8.5节Hook检测/修复

    本节书摘来自异步社区<Android安全技术揭秘与防范>一书中的第8章8.5节Hook检测/修复,作者周圣韬,更多章节内容可以访问云栖社区"异步社区"公众号查看. 8. ...

  4. 新书《Android安全技术揭秘与防范》终于出版了

    愿每一个北漂的孩子都能找到自己为之奋斗的方向,不负那些在远方默默支持我们的父母和亲人. 历时将近1的新书<Android安全技术揭秘与防范>终于出版了,第一次写书万分激动,这里向大家推广一 ...

  5. 字节大佬封神之作《Android Framework高级开发笔记》,完整版开放下载

    在现阶段的Android开发工作中,无论是底层,还是应用层,Framework都至关重要.Framework的火热程度,相信我也不必再赘述. 为帮助大家深度学习Framework背景及它的巨大作用,这 ...

  6. 《Android系统开发》笔记

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

  7. 浅入浅出 Android 安全:第四章 Android 框架层安全

    第四章 Android 框架层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程 ...

  8. 便签 java_基于安卓Android的便签笔记APP设计(Android studio)

    基于安卓Android的便签笔记APP设计(Android studio)(论文9000字,程序代码) 摘要:本文介绍了便签的发展史.基础操作流程以及便签的具体功能,提出了基于Android的便签AP ...

  9. 框架揭秘_揭秘类型系统

    框架揭秘 Type systems nurture the interest of many, but few dig under the surface. You may try hard, but ...

  10. 轻量级HTTP客户端框架—Forest学习笔记

    轻量级HTTP客户端框架-Forest学习笔记 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信. ...

最新文章

  1. 清华姚班陈丹琦获斯隆奖!与去年得主马腾宇是同班同学,博士毕业论文是近十年最热之一...
  2. Python3.x和Python2.x的区别
  3. redis之intset
  4. 一起学nRF51xx 14 -  temp
  5. mybatis jdbctype数据类型_mybaits-mybatis配置
  6. spring api 中文_Spring高级技术梳理
  7. Linux / sudo、su、sudo su、sudo -i 使用和区别
  8. 用ASP.NET Core MVC 和 EF Core 构建Web应用 (一)
  9. 中专生计算机教案,[定稿]计算机基础教案中专V8.1(全文完整版)
  10. 一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手
  11. vue环境搭建以及vue-cli使用
  12. base64编码 springboot_解决idea中Springboot找不到BASE64Encoder或Decoder的jar包
  13. Android与物联网设备通信-概念入门
  14. freemarker 生成word,支持循环导出图片 WPS版本
  15. 数学基础之代数学(6)——群
  16. 东方梦符祭 N1无尽30波终于通了
  17. davinci平台Uboot移植
  18. Unity 之 ShaderGraph Input节点解析汇总
  19. 新奇遇记之臭屁猴(第一集)
  20. 结构型模式之二其他模式

热门文章

  1. oracle mysql odbc驱动程序_oracle odbc驱动下载
  2. 10万字208道Java经典面试题总结(附答案)
  3. java vips 算法_[Java] 22G传智播客java JavaEE+物联云计算 就业班(非基础班) 视频...
  4. 安卓暗黑模式软件_程序员欢呼!微软 GitHub 安卓版 App 发布预览:支持暗黑模式...
  5. 【复习篇】高等代数第五版重难知识点整理(1)
  6. 威纶通触摸屏上传错误_轻松学会威纶通触摸屏上传与反编译
  7. mt管理器主题修改教程_微信也可以设置皮肤了!超详细教程和方法!
  8. 学生宿舍管理系统设计与分析
  9. android的抓包工具,安卓Android无需ROOT的流量抓包工具:PacketCapture
  10. android官方升级包下载安装,安卓7.0正式版安装包下载