App启动流程及启动崩溃检测

本文深入探讨了Android App从点击图标到启动的过程,包括Zygote进程的作用、system_server与Launcher的交互,以及详细的启动步骤。同时,提到了在启动过程中遇到崩溃时,如何利用友盟+u-apm进行问题定位和监控,确保App的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要更好的进行App的启动优化,就要充分了解相关的启动知识,只有这样,才可以帮助我们更好的进行启动优化,本文谈一下从点击桌面图标到App启动,背后都发生了什么?系统又做了哪些工作?

首先需要知道App启动牵涉几个进程,它们之间如何通信?

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

Zygote:首先,来了解一下进程Zygote , 字面意思受精卵,说到受精卵,就想到分裂孵化。

《道德经》有云:道生一,一生二,二生三,三生万物。

我们把Zygote视为一,至于Zygote的父进程“道”,属于Android 系统架构Native层中的Init进程,不属于该文章的介绍范围,暂且不表。

zygote是所有Android进程的父进程;

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

1)system_server

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

2)Luncher

而Luncher进程就是桌面App,就是我们看到的手机开机完成后桌面,它本质上是一个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、启动完成。

注意!!!!如果启动过程中发生了崩溃现象,我们要如何查询问题源所在呢?

这里建议使用友盟+u-apmApp性能稳定监控平台,通过轻量型的接入,即刻拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析等性能能力等等,应用崩溃监控当App运行时,对主进程和子进程的崩溃捕获和分析。通过对崩溃日志的计算,为开发者展示了App在所选时间中的错误趋势、错误分布、错误列表和错误详情,快速分析出导致App崩溃的主要原因。支持双端的接入查询,不同应用版本、设备机型、操作系统、运营商、地域的信息筛选,功能异常强大。

本文讲述了App启动流程以及崩溃监控平台——友盟u-apm,通过轻量型的接入,获得强大的数据筛选分析能力,使用图表的形式直观展示了数据分布情况,你值得一试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值