大家是否都有这样的疑问,从点击桌面图标到app启动,背后到底发生了什么?系统做了哪些工作?牵涉几个进程,它们之间如何通信?我想大家都十分好奇,下面我就来解开大家的疑惑!

首先来了解一些相关概念:

1、init

init是Linux的初始进程,zygote是其后的第一个进程。

2、Zygote

首先,来了解一下进程Zygote , 字面意思受精卵,说到受精卵,就想到分裂孵化。比如《道德经》里有句话是这样说的道生一,一生二,二生三,三生万物。我们把Zygote视为一,至于Zygote的父进程“道”,属于Android 系统架构Native层中的Init进程,不属于该文章的介绍范围,暂且不表。

zygote是所有Android进程的父进程;下面开始分裂,首先要知道在Android系统架构中Framework层,所有的java进程(C++管不着)都起源于Zygote。

3、system_server

第一次分裂出的进程叫做system_server,(注意Zygote进程一直还在啊,并不是分裂了就没有了,这点不同受精卵真实过程),看着名字就知道是系统服务相关的,没错,我们常用的ActivityManagerService(以下简称AMS)、WindowManagerService和PackageManagerService等等各种服务,都是system_server这个进程启动的。

4、Luncher

而Luncher进程就是桌面App,就是我们看到的手机开机完成后桌面,它本质上是一个App。其他应用比如浏览器、相机、邮件、电话、微信、淘宝等等,都是Zygote孵化而来。为什么要孵化,因为从头创建消耗太大,从0到1难呐,万事开头难,这样孵化效率较高。

了解完基础概念之后,接下来我们看下详细的启动流程:

详细启动流程

1、当你点击了App的桌面图标时,Luncher进程收到你的操作。启动开始。

2、Luncher进程启动远程进程,通过Binder发消息给system_server。

3、system_server 中AMS经过一系列复杂操作,最终调用 Process.start(android.app.ActivityThread) , 然后通过socket通知Zygote进程。

4、Zygote进程收到通知,fork出app进程,并执行ActivityThread.main()方法。

5、ActivityThread.main()主要干了两件事(由于字数有限,暂不展开阐述了):

①一准备主线程Looper , 这个大家应该很熟悉了,主线程靠它撑着呢。

②二是通过ActivityThread.attch()将主线程ApplicationThread绑定到AMS上。

6、AMS绑定后,经过一系列复杂调用,执行到realStartActivityLocked()方法。

7、上一步方法会调用到ApplicationThread的scheduleLaunchActivity(),而该方法又调用ActicityThread的handleLaunchActivity(),创建application对象,并调用onCreate()方法,获取启动Activity并调用onCreate()方法。

8、启动完成。

上面我们讲了app的启动流程,其实有很多开发者反馈app启动速度慢、耗时久,这两大问题甚是令人头大,有时看似解决了这两个问题,过段时间之后,这两种情况又出现了;其实,还是因为我们没有找到根本原因,没有分析出问题所在。

此时,工具就派上用场了,比如“友盟”U-APM,它的启动分析功能可以帮助开发人员收集启动耗时信息,并找到造成启动耗时的问题。此外,U-APM通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。

总之,友盟对比同类竞品来说有明显优势,强烈推荐Android开发人员使用友盟,深入了解应用的性能和稳定性,集成简单,服务有保障,帮助您高效提升应用质量,让你的app变得更加丝滑!

安卓App启动流程详解相关推荐

  1. 【线上沙龙直播报名】App 启动流程详解及其优化

    点击上方"公众号"可以订阅哦 [美团点评技术沙龙Online]是美团点评技术团队推出的线上分享课程,每月2-3期,采用目前最火热的线上直播形式,邀请美团点评技术专家,面向互联网技术 ...

  2. Android App启动流程详解

    前言:在之前的文章中已经写了apk的打包流程.安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程.经过今天的梳理以后咱们就可以对apk包是怎么编译生成的.apk是怎么被安装到安卓手机的 ...

  3. U-Boot启动流程详解

    参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin ...

  4. iOS APP上架流程详解

    iOS APP上架流程详解 青葱烈马 2016.04.28  前言:作为一名 iOS 开发工程师, APP 的上架是必备技能. iOS 上架的流程主要可以简单总结为: 一个包,两个网址,三个证书, 一 ...

  5. 【Autosar 启动流程详解】

    Autosar 启动流程详解 1. vLinkGen_Template.lsl 2. BrsHwStartup.c 3.BrsMainStartup.c 4.BrsMain.c 链接文件: 1. vL ...

  6. 【正点原子Linux连载】第三十二章 U-Boot启动流程详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  7. golang程序启动流程详解

    golang程序启动流程详解 环境 go1.16.5 linux/amd64 用例 package mainimport "fmt"func main() {fmt.Println ...

  8. android zygote启动流程,Android zygote启动流程详解

    对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...

  9. 苹果app开发流程详解​

    苹果App Store上传应用流程详解,在向AppStore提交应用之前,开发者首先要成为苹果iOS开发者项目的成员,每年向苹果缴纳99美元或199美元的费用(具体申请方法后期更新).​ 免688开发 ...

  10. Springboot启动流程详解

    SpringMVC请求流程详解 SpringMVC框架是一个基于请求驱动的Web框架,并且使用了'前端控制器'模型来进行设计,再根据'请求映射规则'分发给相应的页面控制器进行处理. (一)整体流程 每 ...

最新文章

  1. Python自动化开发学习6
  2. 李彦宏为什么被称为AI先生,美国权威媒体给出答案
  3. opencv中图像的基本结构 类型的定义
  4. java类注入service为null_解决webservice(Java)中dao层注入为null问题
  5. 一文讲解自动机器学习(AutoML)!
  6. You can't specify target table 'myusertable' for ......in FROM clause
  7. Git服务器报错:host key for (ip地址) has changed and you have requested strict checking
  8. 利用云安监控和管理云
  9. php定时任务sw,[原创]Swoole和Swoft的那些事(Task投递/定时任务篇)
  10. Vue 字符串转JSON
  11. POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)
  12. 怎样看mysql是不是支持SSL_mysql是如何支持ssl通信的?
  13. 读写分离无效的大坑(新使用数据库读写分离的同学可以参考)
  14. [梦]2005.2.10
  15. 《JavaScript征途》广泛征集读后感创作者,参与有奖!
  16. MySQL数据库优化的八种方式(总结)
  17. Linux创翼拨号上网,创翼客户端下载(网络拨号工具) v4.11.4.731 最新版_数码资源网...
  18. 从布朗运动、随机微积分到股票买卖
  19. java 面试 英语自我介绍
  20. 汇编语言之DOSBox

热门文章

  1. python 减法函数_python之函数
  2. Win11怎么重装显卡驱动程序?Win11显卡驱动怎么卸载重装?
  3. 怎样利用计算机随机分组,随机分组编制方法哪家强
  4. matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
  5. 计算机程序员的英文简历,电脑程序员个人英文简历范文
  6. Linux·串口编程
  7. *计算机二级MS office 注意事项*
  8. Android WiFi功能实现,知其然必知其所以然! (二)
  9. MATLAB频谱图绘制
  10. 在Chrome谷歌浏览器中使用H5地理位置API