iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >详细分析Android-Zygote的启动过程
  • 201
分享到

详细分析Android-Zygote的启动过程

2024-04-02 19:04:59 201人浏览 安东尼
摘要

目录创建Socket启动SystemServer等待AMSAndroid系统中,DVM,ART,应用程序进程和运行系统的关键服务的SystemServer进程都是ZyGote创建的。

Android系统中,DVM,ART,应用程序进程和运行系统的关键服务的SystemServer进程都是ZyGote创建的。他通过fork的形式来创建。由于Zygote在启动时会创建DVM或者ART,因此通过fork而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM或者ART的实例副本。

在启动Zygote的时候,会根据ro.zygote属性来控制使用不同的Zygote启动脚本。启动脚本放在System/core/rootdir目录中。

Zygote在启动的时候会走到ZygoteInit的main方法,在这个方法中主要做了以下这些事:

  • 创建一个Server端的Socket
  • 预加载类和资源
  • 启动SystemServer进程
  • 等待AMS请求创建新的应用程序进程

通过JNI调用ZygoteInit的main方法后,Zygote便进入了java层,此前的所有代码都没有java层,Zygote开创了java框架层。

Zygote创建的Socket的name为zygote,用于等待ActivityManagerService请求Zygote创建新应用程序进程。

在启动了SystemServer进程后,系统的服务也会由SystemServer进程启动起来。

最后就会调用方法,等待AMS请求创建新的应用程序进程。

创建Socket

在创建Socket的时候,会创建一个名字,名字为【ANDROID_SOCKET_zygote】,通过这个名字获取环境变量的值,文件描符参数,最后创建一个文件描述符,在生成LocalServerSocket的时候传入。这个也就是服务端的Socket。Zygote将SystemServer进程启动后,就会在这个服务端的Socket上等待AMS的信号。

启动SystemServer

需要先创建一个args数组,用来保存启动SystemServer的启动参数。SystemServer进程的用户id和用户组id设置为1000,进程名字为system_server,启动的类名为:com.android.server.SystemServer。接着会调用Zygote的forkSystemServer方法,其内部会调用nativeForkSystemServer这个Native方法,最终通过fork函数在当前进程创建一个子进程,就是SystemServer进程。如果forkSystemServer方法返回的pid为0,表示当前代码运行在新创建的子进程中,则会执行handleSystemServerProcess来处理SystemServer进程。

等待AMS

获取到前面创建的Socket的fd字段的值,添加到一个fds列表中。接下来就无限循环等待AMS的请求。会有一个无限循环,在这个循环中会将fds的数据转移到pollFds数组上,然后对pollFds进行遍历,遍历的同时会判断当前Zygote进程是否与AMS建立了连接。如果建立了连接,调用acceptCommamdPeer方法得到ZygoteConnection类并添加到Socket连接列表peers中。然后将ZygoteConnection的fd添加到fds列表中,以便可以接收AMS发送过来的请求。如果在遍历pollFds的时候不是与AMS建立连接,那么就是创建应用的请求,回调用ZygoteConnection的runOnce方法创建一个新的应用程序进程,创建成功后会将这个Socket从peers和fds中清除。

Zygote进程启动总结

  • 启动Zygote进程
  • 创建虚拟机,为Java虚拟机注册JNI方法
  • 通过JNI调用ZygoteInit的main函数,进入Java框架层
  • 通过reGISterZygoteSocket方法创建服务端Socket,通过funSelectLoop方法等待AMS请求。
  • 启动SystemServer进程

以上就是Android-Zygote启动过程详解的详细内容,更多关于Android-Zygote启动的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详细分析Android-Zygote的启动过程

本文链接: https://www.lsjlt.com/news/128655.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详细分析Android-Zygote的启动过程
    目录创建Socket启动SystemServer等待AMSAndroid系统中,DVM,ART,应用程序进程和运行系统的关键服务的SystemServer进程都是Zygote创建的。...
    99+
    2024-04-02
  • Android zygote启动流程详解
    目录对zygote的理解作用启动流程启动入口脚本讲解启动过程App_main::mainAndroidRuntime::start对zygote的理解 在Android系统中,zy...
    99+
    2024-04-02
  • Springboot启动流程详细分析
    springboot启动是通过一个main方法启动的,代码如下 @SpringBootApplication public class Application { publi...
    99+
    2022-12-23
    Springboot启动流程 Springboot启动过程
  • SpringBoot超详细分析启动流程
    目录1、创建SpringApplication1.1、判断web类型1.2、加载上下文初始化器1.3、加载监听器1.4、获得引导类类型2、执行SpringApplication的ru...
    99+
    2024-04-02
  • Android组件Activity的启动过程深入分析
    目录前言源码分析总结前言 Activity是Android中一个很重要的概念,堪称四大组件之首,关于Activity有很多内容,比如生命周期和启动Flags,这二者想要说清楚,恐怕又...
    99+
    2023-05-15
    Android Activity启动过程 Android Activity启动方法
  • Android Activity启动过程详解
     Android系统启动篇 1,《android系统启动流程简介》 2,《android init进程启动流程》 3,《android zygote进程启动流程》 4,《Android SystemServer进程启动流程》 5,《andr...
    99+
    2023-09-02
    android
  • 详解Android系统启动过程
    目录计算机是如何启动的引导阶段加载内核阶段Android的启动过程init进程init.rc 文件service_manager 进程surface_flinger 进程media_...
    99+
    2024-04-02
  • SpringBoot自动配置与启动流程详细分析
    目录一、自动配置1. @ComponentScan2. @SpringBootConfiguration3. @EnableAutoConfigeration4. @Conditio...
    99+
    2022-11-13
    SpringBoot自动配置 SpringBoot启动流程
  • Redis Server启动过程的详细步骤
    目录1、 初始化参数配置2、 加载并解析配置文件3、 初始化服务器内部变量4、执行事件驱动框架本文基于社区版Redis 4.0.8 1、 初始化参数配置 由函数initServer...
    99+
    2024-04-02
  • android性能优化之启动过程的示例分析
    小编给大家分享一下android性能优化之启动过程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、应用的启动方式通常来说,启动方式分为两种:冷启动和热...
    99+
    2023-05-30
    android
  • Linux启动过程的示例分析
    这篇文章主要为大家展示了“Linux启动过程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux启动过程的示例分析”这篇文章吧。Linux启动过程详细介绍启动第一步--加载BIOS...
    99+
    2023-06-09
  • 详解Android中的ActivityThread和APP启动过程
    目录ActiviryThreadActivityThread的初始化主线程Looper的初始化主线程Handler的初始化ApplicationThread及Activity的创建和...
    99+
    2024-04-02
  • 详解Android壁纸服务的启动过程
    壁纸基础 android中的壁纸分为动态壁纸和静态壁纸两种,两种类型的壁纸都以Service的类型运行在系统后台。 静态壁纸:仅以图片的形式进行展示对于静态壁纸,可以使用W...
    99+
    2024-04-02
  • React Native 启动流程详细解析
    导读:本文以 react-native-cli 创建的示例工程(安卓部分)为例,分析 React Native 的启动流程。 工程创建步骤可以参考官网。本文所分析 React Nat...
    99+
    2024-04-02
  • RAC各个进程启动的过程分析
    RAC各个进程启动的过程分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 ohasd无法kill,一旦kil...
    99+
    2024-04-02
  • Angularjs中启动过程的示例分析
    这篇文章主要介绍Angularjs中启动过程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!启动过程(v1.3.9)步骤一用自执行函数的形式让整个代码在加载完成之后立即执行i...
    99+
    2024-04-02
  • Linux中开机启动的过程分析
    这篇文章主要介绍了Linux中开机启动的过程分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Inp...
    99+
    2023-06-13
  • Android系统启动(四) — Launcher 启动过程
    1 Launcher 概述 系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做 Launcher。Launcher 在启动过程中会请求 PackageManager...
    99+
    2023-09-04
    android java 开发语言
  • Android Choreographer源码详细分析
    目录一、首先介绍一些基础知识二、android源码中Choreographer是如何运行一、首先介绍一些基础知识 1.刷新率(Refresh Rate): 刷新率代表屏幕在一秒内刷新...
    99+
    2024-04-02
  • SpringBoot启动过程逐步分析讲解
    springboot启动是通过一个main方法启动的,代码如下 @SpringBootApplication public class Application { publi...
    99+
    2023-01-06
    SpringBoot启动过程 SpringBoot启动过程原理 SpringBoot启动过程执行顺序
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作