--摘自《Android进阶解密》

1.AMS在启动应用程序时会检查者应用程序需要的应用进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程

2.Zygote的Java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建新的应用程序进程

3.Zygote进程通过fock自身创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。当然还创建了Binder线程池和消息循环,这样运行在应用进程中的应用程序就可以方便地使用Binder进行进程间通信以及处理消息了

应用程序进程启动过程

第一步:AMS发送启动应用程序进程请求

第二步:Zygote接收请求并创建应用程序进程

其中:

4.ZygoteInit类的zygoteInit方法会启动Binder线程池

5.将当前线程注册到Binder驱动程序中,这样我们创建的线程就加入了Binder线程池中,新创建的应用程序进程就支持Binder进程间通信了,我们只需要创建当前进程的Binder对象,并将它注册到ServiceManager中就可以实现Binder进程间通信

6.RuntimeInit的invokeStaticMain方法最后会抛出一个MethodAndArgsCaller异常,抓取异常过程中会执行call.run方法,run方法中会调用mMethod.invoke,其实就是ActivityThread的main方法,main方法中开启了消息循环

应用程序进程启动过程相关推荐

  1. Android应用程序进程启动过程

    相关文章 Android系统架构与系统源码目录 Android系统启动流程(一)解析init进程启动过程 Android系统启动流程(二)解析Zygote进程启动过程 Android系统启动流程(三) ...

  2. android 启动app过程,应用程序进程启动过程

    原标题:应用程序进程启动过程 作者:慕涵盛华 链接:https://www.jianshu.com/p/b158615cc2ad 一.背景 首先注意的是:这里要说的是应用程序进程的启动过程,而不是应用 ...

  3. Android应用程序进程启动过程的源代码分析(1)

    Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制:这两个特点都是在进程的初始化过程中实 ...

  4. [日更-2019.4.26、27、28] cm-14.1 Android系统启动过程分析(四)-应用程序进程启动过程...

    2019独角兽企业重金招聘Python工程师标准>>> 声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的: 本文 ...

  5. cm-14.1 Android系统启动过程分析(8)-应用程序进程启动过程

    文章目录 声明 0 写在前面 1 什么应用程序进程? 2 应用程序进程的启动过程 2.1 AMS发送启动应用程序进程请求 2.2 Zygote接收AMS的请求并创建应用程序进程 3 启动线程池 4 创 ...

  6. Android应用程序进程启动过程的源代码分析(2)

      Step 5. ZygoteInit.runSelectLoopMode         这个函数定义在frameworks/base/core/java/com/android/internal ...

  7. 从源码角度看Android系统SystemServer进程启动过程

    SystemServer进程是由Zygote进程fork生成,进程名为system_server,主要用于创建系统服务. 备注:本文将结合Android8.0的源码看SystemServer进程的启动 ...

  8. 从源码角度看Android系统Zygote进程启动过程

    在Android系统中,DVM.ART.应用程序进程和SystemServer进程都是由Zygote进程创建的,因此Zygote又称为"孵化器".它是通过fork的形式来创建应用程 ...

  9. exe程序的启动过程

    学习windows 编程从mfc角度来说可分为两部分那就是WinMain函数以前的,和WinMain函数以后的.前者涉及很多windows操作系统内部的知识,后者么看mfc源码就可以了.虽然大多数程序 ...

最新文章

  1. 删除单链表中的重复节点(c语言版本)
  2. mysql数据库项目式教程答案_MySQL数据库项目式教程(高职)
  3. CentOS7搭建hadoop2.6.4+HBase1.1.6
  4. 根据企业财务进行风险分析——基于pytorch
  5. Android 即时通讯开发
  6. 极佳mysql数据库碎片恢复工具,极佳SQL数据库日志恢复工具
  7. 金蝶k3cloud安装时,k3cloudmanager没有,该如何处理
  8. Conflux人物志 | 柠檬树上柠檬果,柠檬树下他和他
  9. Python模拟登陆强智教务以及使用(持续更新中)
  10. 微软成功收购雅虎五大理由:可抗衡谷歌
  11. Oracle10g或Oracle11g完全卸载正确步骤(亲身体验-详细图文教程)
  12. 【工具】一键制作纯净ROM去除推广APP,支持线刷包卡刷包
  13. ST M24C01-WDW6TP EEPROM存储器芯片
  14. Canvas 绘制直线
  15. redis保护模式的报错
  16. 二次型化标准形的三种方法
  17. PDF如何生成电子书分享
  18. JsonProperty.Access.READ_ONLY 导致查询字段为null
  19. 遵化市10余个局委办一把手调研九次方大数据,详细部署数字遵化建设
  20. matlab 画偏振态,光的偏振态分析MATLAB分析

热门文章

  1. 你能否列出与 Elasticsearch 有关的主要可用字段数据类型?
  2. 浅谈Kubernetes Service负载均衡实现机制
  3. 第二章--电商项目DB规划
  4. 工程师软技能6:理财人生精神
  5. 收获,不止SQL优化——抓住SQL的本质--第八章
  6. 查看文件大小du -sh ./ ll -h
  7. windows平台下subversion服务器端配置
  8. maven 打包替换文件_使用Maven打包生成文件 | 学步园
  9. Hbase伪分布式安装
  10. Protobuf生成Go代码指南