持续学习--PMS服务启动原理、AMS服务执行流程详解

17 篇文章 1 订阅
10 篇文章 1 订阅

1.PMS服务启动原理?从开机到APP启动,PMS服务处理机制及流程?

  1. PMS全称Package Manager Service,由System Server启动,PMS运行在单独的系统进程中,启动的时候通过ServerManager.addService()存入PMS对象,应用层通过ServerManager.getService()获取对象,由于PMS运行在单独的进程中,所有其获取的对象是一个IBinder接口。
  2. PMS的作用时期主要集中在手机开机时期,它会扫描/data/system和/data/app两个目录(前者存放系统应用,后者存放我们安装的应用),比较耗时;Android 9.0、10.0通过线程、缓存等机制进行优化,9.0以下没有;扫描所有的apk文件,只是读取每一个AndroidManifest.xml文件信息,通过dom解析,通过tagName,解析对应的四大组件(四大组件有各自对应的集合)然后统一缓存到一个Package对象中。
  3. PMS利用PackageParser类来解析apk文件,我们应用自己也可以利用反射来解析apk文件。

2.APP启动流程

     当手机开机后,首先会创建一个Init进程,在Init进程里启动Zygote进程,Zygote进程里启动System Server进程,在System Server进程里,启动诸如AMS、PMS、PMS等服务。

app启动原理,简单的讲就是通过zygote进程fork出一个子进程。

如果人家继续问为什么是zygote进程来创建,而不是init进程,或者其他?
这时讲一下Android系统结构组成,以及系统执行流程
结构组成: uboot, kernel, hal, dalvik, framework, app
启动流程: uboot->kernel->init(1号进程)->通过解析init.rc陆续启动vold,zygote等底层基础服务->systemserver->launcher...
init进程,只是负责创建底层基础服务,如: init.rc里面的服务
zygote,这个是android系统的基石, 它是所有android进程父进程,所有android层程序运行的环境也是zygote启动时就准备好了。

uboot是引导程序,不属于kerenl.
它的作用就是将kernel代码块加载到内存,然后跳到kernel的内存地址执行,此时kernel就起来了。
或者说程序运行的本质,是将代码块加载到某块内存,然后跳转到该地址执行。
关于android完整的正常启动执行路径,看一下这个图:

init ----》Service Manager

init -----》zygote--fork---->System Server

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值