Android Framework启动流程
Framework启动流程
在手机的Linux系统启动后,Framework层第一个启动的进程就是zygote。Zygote负责预加载framework层的共享资源,比如SDK中的类,同时它是framework层上所有虚拟机进程的孵化器,即所谓的“源头”。所有基于虚拟机的java程序,比如我们安装的apk进程、framework层的系统进程等,都是由zygote创建出来的。
一、Zygote
Zygote进程的大致启动过程如下:
1. linux系统启动
2. linux依次启动在/init.rc中注册的进程,这其中就有zygote进程,它被注册为一个service,即常驻进程:
这段代码实际上就是执行app_process可执行文件,并将此进程命名为zygote
3. app_process中创建虚拟机对象,创造java执行环境,开始加载ZygoteInit.java方法,并从其main方法开始执行。ZygoteInit类主要进行的工作有:
1) 启动Socket服务,用于接收建立进程的指令。
2) Framework共享资源的预加载。这些类及资源实际上就是SDK 中定义的大部分类和
资源。这些资源是所有进程共享的。当通过zygote 孵化出新的APK进程后,这些进程只需要去装载APK自身包含的类和资源即可,无需处理SDK部分的类,因为Zygote在启动时已经加载完毕了。这就有效地解决了多个APK 共享Framework 资源的问 题。具体资源大概分为2类:
a.预加载Framework类列表。此列表定义在frameworks/base/preload-classes文件中。是通过WritePreloadedClassFile.java类生成的。
b.加载preload-resources。在frameworks/base/core/res/res/values/arrays.xml中定义。包含两类资源:drawable和color。
3)通过fork孵化出第一个进程:SystemServer。
我们看到zygote的父进程id是1,正说明它是init进程启动的。
这些进程的父进程id都是120,也就是上面的zygote进程。这也验证了所有进程都是zygote孵化出来的,包括一些framework中的系统进程,和用户安装的apk进程。
至此,framework的启动过程基本告一段落了。在触发了第一个Activity(即Home程序)后,就等待着新的请求的到来。
Android Framework启动流程相关推荐
- Android开机启动流程简析
Android开机启动流程简析 (一) 文章目录 Android开机启动流程简析 (一) 前言 一.开机启动的流程概述 二.Android的启动过程分析 (1).总体流程 init简述 Zygote简 ...
- Android -- Wifi启动流程分析
Android -- Wifi启动流程分析 Android网络各个模式中,Wifi应该是目前最常用的一种网络方式了:下面就简单介绍下Android中Wifi的启动流程. 当我在Setting菜单里点击 ...
- 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程
文章目录 一.加壳的 Android 应用启动流程 二.使用反射替换 LoadedApk 中的类加载器流程 一.加壳的 Android 应用启动流程 加壳的 Android 应用启动流程 : 加壳的 ...
- 【Android 逆向】Android 进程简介 ( Android 应用启动流程 )
文章目录 前言 一.Android 进程 二.Android 应用启动流程 前言 参考 [Android 逆向]Android 系统文件分析 ( /proc/pid 进程号对应进程目录 | oom_a ...
- Android开机启动流程
Android开机启动流程 一.APPS PBL(Application primary boot loader:主引导加载程序) 二.XBL(Extensible boot loader:可扩展引导 ...
- 【SemiDrive源码分析】【X9芯片启动流程】30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一)
[SemiDrive源码分析][X9芯片启动流程]30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一) 一.Android Kernel 启动流程分析 ...
- 【SemiDrive源码分析】【X9芯片启动流程】27 - AP1 Android Preloader启动流程分析(加载atf、tos、bootloader镜像后进入BL31环境)
[SemiDrive源码分析][X9芯片启动流程]27 - AP1 Android Preloader启动流程分析(加载atf.tos.bootloader镜像后进入BL31环境) 一.Android ...
- android zygote启动流程,Android zygote启动流程详解
对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...
- Android 蓝牙启动流程(以及设置蓝牙为作为sink模式 接收端模式)
本文以Android 7.1为基础 最近在做蓝牙开发,研究了一下蓝牙的启动流程,总结一下 Google在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ.BlueZ的 ...
最新文章
- AI修复100年前晚清影像喜提热搜,这两大算法立功了
- java学习路线导航【教学视频+博客+书籍整理】
- docker本地私有仓库搭建
- Linux学习总结(四十七)NFS服务配置 上篇
- Javascript Array sort排序问题
- 编写 Debugging Tools for Windows 扩展,第 1 部分 (windbg 插件 扩展)
- 03_设置轴标签和范围、轴的标签(Labels on Axes)、定义轴的范围、使用linspace定义X值 (“linspace“ to Define X Values)
- cocos2d-x初探学习笔记(10)--运动中的加速度效果
- LeetCode题库第1题 两数之和
- php扩展之redis
- ad18修改过孔和走线间距_PCB设计之“过孔”
- 在我笔记本Ubuntu上装普罗米修斯记录
- 爬完点评爬某东,爬他个600多本书籍资料
- C/C++快速读写磁盘数据的方法
- 静态路由——手写路由表及综合实验
- 惊天骗局-----一个离开某大型门户网站人员自爆黑幕[zt]
- java递归把list菜单列表转为菜单树
- TiDB:ERROR 1265 : Data Truncated 解决
- 2021年十大最有前途的编程语言,第1名实至名归or名不副实?
- kdevelop快捷键