- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android启动流程 、app安装和启动原理
从头分析整理学习底层知识。
Android启动流程、app启动原理
Android 众多基于Linux内核的系统类似, 启动系统时, bootloader启动内核和init进程. init进程分裂出更多名为daemons(守护进程)的底层的Linux进程, 诸如android debug deamon, USB deamon等. 这些守护进程处理底层硬件相关的接口.随后, init进程会启动一个非常有意思的进程---Zygote. 顾名思义, 这是一个Android平台的非常基础的进程. 这个进程初始化了第一个VM, 并且预加载了framework和众多App所需要的通用资源. 然后它开启一个Socket接口来监听请求, 根据请求孵化出新的VM来管理新的App进程. 一旦收到新的请求, Zygote会基于自身预先加载的VM来孵化出一个新的VM创建一个新的进程.
启动Zygote之后, init进程会启动runtime进程. Zygote会孵化出一个超级管理进程---System Server. SystemServer会启动所有系统核心服务, 例如Activity Manager Service, 硬件相关的Service等. 到此, 系统准备好启动它的第一个App进程---Home进程了.
Zygote 进程
Zygote 英[?za?ɡ??t] 的中文意思是受精卵,从这个意思里也可以看出 Zygote 进程是用来分裂复制(fork)的,实际上所有的 App 进程都是通过对 Zygote 进程的 Fork 得来的。当 app_process 启动 Zygote 时,Zygote 会在其启动后,预加载必要的 Java Classes(相关列表查看 预加载文件) 和 Resources,并启动 System Server ,并打开 /dev/socket/zygote socket 去监听启动应用程序的请求,日后。在下面的代码中,显示了 Zygote 进程如何启动,和加载 System Server 的。
Android进程与Linux进程一样. 默认情况下, 每个apk运行在自己的Linux进程中. 另外, 默认一个进程里面只有一个线程---主线程. 这个主线程中有一个Looper实例, 通过调用Looper.loop()从Message队列里面取出Message来做相应的处理.
那么, 这个进程何时启动的呢?
简单的说, 进程在其需要的时候被启动. 任意时候, 当用户或者其他组件调取你的apk中的任意组件时, 如果你的apk没有运行, 系统会为其创建一个新的进程并启动. 通常, 这个进程会持续运行直到被系统杀死. 关键是: 进程是在被需要的时候才创建的.
点击图标 启动应用
Click事件会调用startActivity(Intent), 会通过Binder IPC机制, 最终调用到ActivityManagerService. 该Service会执行如下操作:
第一步通过PackageManager的resolveIntent()收集这个intent对象的指向信息.指向信息被存储在一个intent对象中.下面重要的一步是通过grantUriPermissionLocked()方法来验证用户是否有足够的权限去调用该intent对象指向的Activity.如果有权限, ActivityManagerService会检查并在新的task中启动目标activity.现在, 是时候检查这个进程的ProcessRecord是否存在了.如果ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity.
ActivityManager 架构
在我们编程过程中,涉及到许多 Activity 跳转的事情,在 Launcher 中点击 Icon 进行跳转也是同样的道理,调用 context.startActivity(intent) 方法。Launcher 出于一个线程,而启动的 App 则运行在另一个进程中,在这其中势必牵涉到跨进程 (IPC) 调用,这样复杂的过程显然需要一种中介者,或者一个系统来进行中转和管理,而这个服务就是 ActivityManagerService。
ActivityManagerService 作为一个守护进程运行在 Android Framework 中,如果让开发者直接接触这个类的话,就需要开发者自行处理 IPC 调用的问题,且这有不利于 Android 系统进行安全校验等工作。因而 Android 系统实现了 ActivityManager,通过这个 Activity
您可能关注的文档
- Android 操作系统简介.pdf
- Android 开发工程师手册V1.0.docx
- Android8.1_软件开发指南.pdf
- Android基础开发教程.pdf
- Android UI 基础知识(完整版).pdf
- Android开发之蓝牙详解.pdf
- Android手机上jianting短信的两种方式1.doc
- Android常用英语(完整版).docx
- Android调试命令(完整版).docx
- Android_AOD技术调研(完整版).docx
- 中国国家标准 GB/T 3883.203-2025手持式、可移式电动工具和园林工具的安全 第203部分:手持式砂轮机、盘式抛光机和盘式砂光机的专用要求.pdf
- 《GB/T 3883.203-2025手持式、可移式电动工具和园林工具的安全 第203部分:手持式砂轮机、盘式抛光机和盘式砂光机的专用要求》.pdf
- GB/T 18430.2-2025蒸气压缩循环冷水(热泵)机组 第2部分:户用及类似用途的冷水(热泵)机组.pdf
- 中国国家标准 GB/T 18430.2-2025蒸气压缩循环冷水(热泵)机组 第2部分:户用及类似用途的冷水(热泵)机组.pdf
- 《GB/T 18430.2-2025蒸气压缩循环冷水(热泵)机组 第2部分:户用及类似用途的冷水(热泵)机组》.pdf
- 中国国家标准 GB/T 46446.1-2025石油、石化和天然气工业 碳钢过程容器内涂层和衬里 第1部分:技术要求.pdf
- 《GB/T 46446.1-2025石油、石化和天然气工业 碳钢过程容器内涂层和衬里 第1部分:技术要求》.pdf
- GB/T 46446.1-2025石油、石化和天然气工业 碳钢过程容器内涂层和衬里 第1部分:技术要求.pdf
- 中国国家标准 GB/T 3883.206-2025手持式、可移式电动工具和园林工具的安全 第206部分:手持式锤类工具的专用要求.pdf
- 《GB/T 3883.206-2025手持式、可移式电动工具和园林工具的安全 第206部分:手持式锤类工具的专用要求》.pdf
最近下载
- 日鼎DHE完整版说明书.pdf VIP
- 新编实用英语综合教程一Unit8FromFattoFit.ppt VIP
- 网神SecSIS3600安全隔离与信息交换系统产品安装调试指导手册[V6.4.1].pdf VIP
- 新编实用英语综合教程一Unit 6 Oympics and Sports.ppt VIP
- 中药二【中成药口诀1】.pdf VIP
- 网神SecSIS-3600安全隔离与信息交换系统管理员手册.doc VIP
- 混凝土居间协议合同协议.docx VIP
- 《燃料的燃烧》教案.docx VIP
- 勿忘国耻-吾辈自强—国家公祭日主题班会精品课件.pptx VIP
- 最新国家开放大学电大《24211学前儿童社会教育活动指导》期末终考题库及标准参考答案 .pdf VIP
原创力文档


文档评论(0)