博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓源代码----安卓系统启动过程(初次研究源代码,表述不当还请见谅)
阅读量:5128 次
发布时间:2019-06-13

本文共 965 字,大约阅读时间需要 3 分钟。

安卓系统事实上是Linux系统中的一个应用程序。相应的程序是app_process,该程序是在init.rc 中被声明的。Linux启动后会启动该zygote(app_process)进程(该程序由java代码实现,由Dalvik虚拟机执行,相应代码在latest-android-2.3.7_r1\android-2.3.7_r1\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java中)

安卓系统中    文件文件夹

安卓2.3源代码中init.rc文件路径及内容

latest-android-2.3.7_r1\android-2.3.7_r1\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java中关键代码

main函数中会首先启动服务端Socket。用于接收启动Dalvik进程的命令

然后会载入一些安卓系统中应用共享的类以及资源文件。ZygoteInit会依据preload_classes文件载入共享的类

preload_classes文件位置及内容

        该文件里总共列出了1830个类,这些类都是须要被载入的,载入多导致开机慢。但载入多意味着安卓应用执行时大部分共享的类已经被载入过 了,从而提高了安卓应用执行速度

资源文件载入依据latest-android-2.3.7_r1\android-2.3.7_r1\frameworks\base\core\res\res\values\arrays.xml中声明进行载入

该文件内容例如以下

载入完以上资源后zygote会孵化出第一个Dalvik进程SystemServer,SystemServer中会创建一个Socketclient,由ActivityManageService负责管理。之后全部的Dalvik进程都将通过该Socketclient间接被启动,当须要启动新APK进程时,AmS会通过该Socketclient向zygote进程的Socket服务端发送一个启动命令,然后zygote会孵化出新的进程

转载于:https://www.cnblogs.com/gccbuaa/p/7214517.html

你可能感兴趣的文章
CoreData教学完整版(封装我们自己的CoreData工具)_Dylan
查看>>
数据库锁
查看>>
Web项目去掉Js文件红叉
查看>>
Linux 学习路径图
查看>>
[LeetCode] 1. Two Sum 两数之和
查看>>
Linux系统shell脚本对字符串、数字、文件的判断
查看>>
Vue生命周期
查看>>
【WebStorm】前端工具开发利器webstrom专篇
查看>>
利用MySQL统计一列中不同值的数量方法示例
查看>>
微服务设计方法
查看>>
大项目之网上书城(九)——订单Demo
查看>>
Hexo主题实现多级分类显示
查看>>
UITableView-数据刷新
查看>>
(摘要)100个伟大的商业理念:理念16:深入投入,绘制蓝本
查看>>
Fiddler抓包配置具体步骤
查看>>
购物车程序
查看>>
Ubuntu18.0.4查看显示器型号
查看>>
C#实现 Eval
查看>>
渗透测试流程
查看>>
Windows 压缩文件到 Linux中解压文件名乱码
查看>>