PMS

  1. 手机开机时;PMS就会开始工作,读取所有应用下包内容(所有应用都有一个地址也就是 File 地址)
  2. 解析 APK 的时候率先解析 AndroidMainfest.xml 文件,读取里面的内容(四大组件会解析成 List 以及各种各样的标签)
    image.png
    image.png
  3. 只需要解析一次最终会生成一个 Package,并且存在一个类型为 ArrayMap 的 mPackages 缓存对象中

    AMS

  4. 调用 startActivity 时,会调用AMS,然后AMS会向PMS协助(存储了 所有的 Package 对象)拿到 ActivityInfo(ResolveInfo类里包着ActivityInfo) 对象并且进行跳转
    image.png
    以此类推里面都是四大组件的 Info
    顺序:startActivity->AMS->PMS->PackageManagerInternal->ResolveInfo

  5. startActivity 方法内部会调用 ActivityManager.getService().startActivity() 。getService() 其实就是 AMS 并且转化成一个 Binder 的 Proxy
  6. AMS 调用 getPackageManagerInternalLocked 返回 PackageManagerInternal 类(实际是PackageManagerInternalImpl),这是个 PMS 内部类。

    JVM

    JVM:是一种规范,对于汇编的语言规范处理

  7. 运行时数据区
    image.png
    image.png
    image.png