Android Application启动流程

转载:http://www.51testing.com/html/34/n-3725434.html

​ 先对整体有了一个基本的认识之后,再去看细节

谈到AndroidApplication的启动流程,很多文章都是各种源码类和方法的一堆调用关系,这样的文章就算看一百遍,也只是云里雾里。源码得看,但是最好不要一下子深陷到源码的细节之中,不可自拔。这里站在前人的基础之上做一个总结。

  在说应用的启动流程之前,得先了解一下Android系统的启动流程,因为Application的启动是离不开系统的处理的。

 Android系统的启动流程

  1.BootLoader启动内核和init进程;

  2.init进程分裂出过个守护进程,如Android Debug Damon,USB Damon,这些守护进程会处理一些与硬件相关的接口;

  3.init进程启动一个Zygote进程

  Zygote进程初始化了第一个VM,并预加载了Framework和一些通用资源。

  zygote进程会开启一个Socket接口,用来监听请求。一旦收到请求,Zygote会基于自身预先加载的VM来孵化一个新的VM,并创建一个新的进程。

  4.启动Zygote之后,init进程会启动Runtime进程。Zygote会孵化出一个超级管理进程-System Server。System Server 会启动所有系统核心的服务,如Activity Manager Service以及硬件相关的Service。

5.这个时候就开始准备启动它的第一个App进程-Home进程了。

  Android系统已经启动完毕,一些核心的服务也已经启动完毕,然后启动Launcher应用,那么什么时候启动应用的进程呢?

 App进程什么时候被创建?

  答案是被需要的时候才创建。

  如果当一个应用(多是Launcher)调用App中的页面之时,如果目标进程不存在,则会创建一个新的进程并启动。

 Application启动流程

  在说Application启动流程之前,先看一张前人的流程图:

  App启动流程

  分析流程的时候,可以同时看一下上面的流程图。

  点击桌面Icon

  然后调用StartActivity(Intent intent)方法;

  这个方法最终会通过Binder IPC的方式调用ActivityManagerService,这里简称AMS。

  AMS会执行以下操作:

  最终会通过PackageManager的resolveIntent()方法收集这个Intent对象的指向信息(中间会经历很多类,方法的调用)。

  通过grantUriPermissionLocked()方法验证用户是否具有足够的权限去调用目标Activity;

  查询ProcessRecord是否存在

  如果不存在,AMS会创建新的进程来实例化目标Activity。

  接下来就说App进程的创建过程了。

  App进程的创建

  调用startProcessLocked()方法创建新的进程

  通过上面所说的Socket通道传递参数给Zygote进程,Zygote进程孵化自身,并调用ZygoteInit.main()方法来实例化ActivityThread对象,并最终返回新进程的pid。

  ActivityThread依次调用Looper.prepare()和Looper.loop()方法来开启消息循环。

  这个时候进程已经创建完毕,但是如何与应用自身的Application联系起来呢?

 Application的绑定

  调用ActivityThread中的bindApplication()方法发送一个BIND_APPLICATION的消息到消息队列中.

  通过handleApplication()方法处理之前的绑定消息;

  调用makeApplication()方法来加载Application的class 到内存中。

  大概的流程如下,如果需要做一些特殊的处理,还是需要自己深入到源码中,找到自己可以处理的点,进行一些定制化处理。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Zygote是什么?有什么作用? Android系统底层基于Linux Kernel, 当Kernel启动过程会创...
    Mr槑阅读 7,797评论 4 18
  • 译者注:原文分成两个部分, 链接如下:http://multi-core-dump.blogspot.com/20...
    anly_jun阅读 66,854评论 24 282
  • 深圳的天气,最让我喜欢的就是雨天。平日里人多、车多,到处嘈杂纷乱。只有雨天的时候,大家才各归各窠,世界由此安静了许...
    木木的都宝阅读 1,828评论 0 0
  • 我的老公 他不姓老,姓徐 徐里的人有个是多余 我曾唤他主人 我也唤过他爱人 他撞击我的身体 却毁坏我的灵魂 他希望...
    扭发条鸟决定的事阅读 1,252评论 0 1
  • 浩瀚时空, 苍茫宇宙, 每个人都是一个独立的行为个体, 有着自己遵循的方式和轨迹。 而我,愿意做一枚细小的星子,掩...
    白乐随心阅读 1,180评论 0 1

友情链接更多精彩内容