vmware9u盘启动-(vmwareu盘启动教程)
来源:191路由网 2022-12-27 08:51:46
和你一起终身学习,这里是程序员Android
本篇文章主要介绍 Android Zygote 启动分析 知识点,通过阅读本篇文章,您将收获以下内容:
一、 Android 系统基本服务
二、虚拟机创建和第一个Java 程序引导
三、Dalvik 虚拟机基本配置
四、Zygote 启动流程
五、Zygote 启动分析
六、Zygote 创建system_server主要方法
七、Zygote 创建System_server 分析
八、Zygote 创建应用
九、Zygote 创建应用流程
十、Zygote 预加载资源
十一、Zygote 预加载的目的
十二、优化Zygote 启动方法: 线程池
十三、fork SystemServer
Zygote 服务时通过 init.rc进程启动的,Zygote 的 classname 为main.
init.rc文件配置代码如下:
... ... on nonencrypted class_start main class_start late_starton property:sys.init_log_level=* loglevel ${sys.init_log_level}... ...
详细可以参考 init.rc启动分析。
Android 9.0 系统启动流程
一、 Android 系统基本服务Android 系统包含netd、servicemanager、surfaceflinge、zygote、media、installd、bootanimation 等基本服务,具体作用请看下图。
Android 系统基本服务
二、虚拟机创建和第一个Java 程序引导为了让APK在不同的虚拟机都可以运行,Google 采取了适配器模式,在让虚拟机运行之前先执行 dexopt ,即将dex文件优化成odex 文件,可以让虚拟机更加优化的执行。
在ART虚拟机中,dexopt 将dex文件优化成二进制格式的问题,从而可以让ART虚拟机执行。
dexopt会调用dex2oat 进行优化,dex2oat 的任务是将原来的dex文件进行预翻译,从而可以加快app运行的时间,但是由于某些app比较复杂,所以优化的时间就比较长。
优化是以dex 文件中的Method 方法为单位,dex2oat 在优化时候,会根据需求优化一定量的Method,即不是所有的Method 都回翻译成oat模式。
虚拟机创建和第一个Java 程序引导
三、Dalvik 虚拟机基本配置在Android系统中,Dalvik 虚拟机 和ART、应用程序进程,以及运行系统的关键服务SystemServer进程都是由 Zygote进程创建孵化的。
Dalvik 虚拟机基本配置如下:
Dalvik 虚拟机基本配置
四、Zygote 启动流程Zygote 是由 init.rc 脚本启动,在init脚本中,我们可以看到会导入import /init.${ro.zygote}.rc 脚本
# Copyright (C) 2012 The Android Open Source Project## IMPORTANT: Do not create world writable files or directories.# This is a common source of Android security bugs.#import /init.environ.rcimport /init.usb.rcimport /init.${ro.hardware}.rcimport /vendor/etc/init/hw/init.${ro.hardware}.rcimport /init.usb.configfs.rc... ...import /init.${ro.zygote}.rc... ...
在 system/core/rootdir目录下,会根据ro.zygote属性值不同,启动不同的脚本,主要包含以下四个zygote脚本。
1.init.zygote32.rc 支电脑持32为系统2.init.zygote32_64.rc3.init.zygote64.rc4.init.zygote64_32.rcinit.zygte.rc脚本
Zygote 启动流程
五、Zygote 启动分析Zygote 启动分析
六、Zygote 创建system_server主要方法Zygote 创建system_server主要方法
七、Zygote 创建System_server 分析Zygote 创建System_server
八、Zygote 创建应用Zygote 创建应用
九、Zygote 创建应用流程Zygote 创建应用流程
十、Zygote 预加载资源Zygote 预加载资源
preloadClasses()
preloadResources()
十一、Zygote 预加载的目的Zygote 预加载的目的
十二、优化Zygote 启动方法: 线程池Zygote 启动优化前提:
1:加载类和资源是可重入操作,所以在并行模式下,不存在互斥的场景2:Android提供了Executors和ExecutorService多线程类,因此可以使用多线程来加载类和资源。3:硬件平台最好是多核,否则加速也不明显;线程池 优化Zygote 启动
Zygote 启动优化实质:
使我们的进程最大限度的抢占CPU
十三、fork SystemServer经过一系列初始化后,在ZygoteInit类中 forkSystemServer,为启动SystemServer 做准备。ZygoteInit.java代码路径如下:alps\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java
/** * Prepare the arguments and forks for the system server process. * * Returns an {@code Runnable} that provides an entrypoint into system_server code in the * child process, and {@code null} in the parent. */ private static Runnable forkSystemServer(String abiList, String socketName, ZygoteServer zygoteServer) { long capabilities = posixCapabilitiesAsBits( OsConstants.CAP_IPC_LOCK, OsConstants.CAP_KILL, OsConstants.CAP_NET_ADMIN, OsConstants.CAP_NET_BIND_SERVICE, OsConstants.CAP_NET_BROADCAST, OsConstants.CAP_NET_RAW, OsConstants.CAP_SYS_MODULE, OsConstants.CAP_SYS_NICE, OsConstants.CAP_SYS_PTRACE, OsConstants.CAP_SYS_TIME, OsConstants.CAP_SYS_TTY_CONFIG, OsConstants.CAP_WAKE_ALARM, OsConstants.CAP_BLOCK_SUSPEND ); /* Containers run without some capabilities, so drop any caps that are not available. */ StructCapUserHeader header = new StructCapUserHeader( OsConstants._LINUX_CAPABILITY_VERSION_3, 0); StructCapUserData[] data; try { data = Os.capget(header); } catch (ErrnoException ex) { throw new RuntimeException(\"Failed to capget()\", ex); } capabilities &= ((long) data[0].effective) | (((long) data[1].effective) << 32); /* Hardcoded command line to start the system server */ String args[] = { \"--setuid=1000\", \"--setgid=1000\", /// M: [Wi-Fi Hotspot Manager] system_server add dhcp (1014) group to access /// \"/data/misc/dhcp/dnsmasq.leases\" \"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1014,1018,1021,1023,\" + \"1024,1032,1065,3001,3002,3003,3006,3007,3009,3010\", \"--capabilities=\" + capabilities + \",\" + capabilities, \"--nice-name=system_server\", \"--runtime-args\", \"--target-sdk-version=\" + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT, \"com.android.server.SystemServer\", }; ZygoteConnection.Arguments parsedArgs = null; int pid; try { parsedArgs = new ZygoteConnection.Arguments(args); ZygoteConnection.applyDebuggerSystemProperty(parsedArgs); ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs); boolean profileSystemServer = SystemProperties.getBoolean( \"dalvik.vm.profilesystemserver\", false); if (profileSystemServer) { parsedArgs.runtimeFlags |= Zygote.PROFILE_SYSTEM_SERVER; } /* Request to fork the system server process */ pid = Zygote.forkSystemServer( parsedArgs.uid, parsedArgs.gid, parsedArgs.gids, parsedArgs.runtimeFlags, null, parsedArgs.permittedCapabilities, parsedArgs.effectiveCapabilities); } catch (IllegalArgumentException ex) { throw new RuntimeException(ex); } /* For child process */ if (pid == 0) { if (hasSecondZygote(abiList)) { waitForSecondaryZygote(socketName); } zygoteServer.closeServerSocket(); return handleSystemServerProcess(parsedArgs); } return null; }
电脑
相关阅读
-
-
u盘启动盘制作成功后读不出来-(u盘启动盘制作成功后读不出来文件)
(u盘启动盘制作成功后读不出来文件)有网友反映自己做系统时,进入优盘启动pe,键盘鼠标失灵,完全用不了,这是怎么回事,下面小编告诉你是怎么回事。电脑鼠标和键盘是电脑必备usb设备,但是总会出问题。第一种,考虑是硬件问题1、重新插拔下鼠标键盘试试;2、键盘鼠标本身质量问题,零件之间接触不良...
2022-12-27
-
-
vmware9u盘启动-(vmwareu盘启动教程)
(vmwareu盘启动教程)和你一起终身学习,这里是程序员Android本篇文章主要介绍AndroidZygote启动分析知识点,通过阅读本篇文章,您将收获以下内容:一、Android系统基本服务二、虚拟机创建和第一个Java程序引...
2022-12-27
-
-
win10任务栏网络图标不见怎么办-(win10任务栏网络图标不见怎么办)
(win10任务栏网络图标不见怎么办)我们在使用电脑操作软件的时候,通常只要一运行软件的话,电脑右下角的任务栏中都会有图标出现的,有些用户反馈在Win10系统右下角的任务栏中存在的网络设置图标发现其莫名其妙的不见了,那么想要对系统网络进行相关设...
2022-12-27
-
-
win10ip地址怎么改-(win10ip地址怎么改不掉)
(win10ip地址怎么改不掉)我们在使用电脑的时候经常会使用到一些特殊的IP地址,这样可以有效地提高我们的网络速度,但是不少用户在升级了Win11系统之后不知道怎么修改,下面小编就带着大家一起去看看电脑吧!更多系统教程尽在小白重装网第一步,右键右下角网络图标,打开“网络和internet设置”(如图所示)。第二步,点击上...
2022-12-27
-
-
macbook上装windows-(苹果电脑安装windows)
(苹果电脑安装windows)售价过万的MacBookPro14,性能也就相当于6000元的Windows游戏本。果粉一定都认同这句话:大家之所以能接受“高价低配”的苹果电脑,是因为macOS几乎提供了一半以上的价值。但是在苹果电脑还在用i...
2022-12-27
191路由网 - 192.168.1.1,192.168.0.1无线路由器设置教程
版权声明:本站的文章和图片来自互联网收集,仅做分享之用如有侵权请联系站长,我们将在24小时内删除