安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?

当用户点击安卓手机桌面上的应用图标,到桌面显示出应用主Activity界面而完成应用启动,这个看似很简单的过程,其实包含了复杂的底层交互。整个启动过程,涉及了Android系统的很多核心知识点。现在我来对安卓app启动流程进行分析。

一、安卓app启动流程(冷启动)分析

一般来说,冷启动包括以下几个步骤:

启动APP进程:当我们点击Launcher桌面程序的APP图标时,Launcher程序会调用startActivity()函数,通过Binder跨进程通信,发送消息给system_server进程。在system_server进程中,由AMS通过socket通信告知Zygote进程fork出一个子进程(APP进程)。

开启APP主线程:APP进程启动后,会实例化一个ActivityThread,并执行其main函数,同时会创建ApplicationThread、Looper、Handler对象,开启主线程消息循环Looper.loop()。

创建并初始化Application和Activity:ActivityThread的main函数通过调用attach方法进行 Binder 通信,通知system_server进程执行AMS的attachApplication方法。在attachApplication方法中,AMS分别通过bindApplication、scheduleLaunchActivity方法,通知APP进程的主线程Handler,对APP进程的Application和Activity进行初始化,并执行Application、Activity的生命周期。

UI布局和绘制:主线程Handler初始化Activity时,会执行创建PhoneWindow、初始化DecorView的操作,并且添加布局到DecorView的ContentView中。ContentView,对应着Activity的setContentView中设置的layout.xml布局文件所在的最外层父布局。Android视图层次结构如下图:
安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?_第1张图片
至此,应用启动流程完成,这里对源码细节不做过多分析。

二、下面对启动过程中,涉及到的一些关键角色做一下介绍。

1、Zygote进程

Android系统启动过程中,会先启动linux内核,然后加载init.rc文件,启动init进程。然后,init进程通过解析init.rc文件fork生成Zygote进程,该进程也是Android系统的首个Java进程。之后Zygote进程负责孵化System Server进程和APP进程。

2、SystemServer进程

由Zygote进程fork生成,SystemServer是Zygote孵化的第一个进程。

负责启动、管理整个Java Framework,系统里面重要的服务都是在这个进程里面开启的,比如AMS(ActivityManagerService)、PMS(PackageManagerService)、WMS(WindowManagerService)。

3、APP进程

Zygote进程在App层中孵化出的第一个进程是Launcher进程,即手机的桌面APP。

Zygote还会孵化出Browser、Email、Phone等APP进程,每个APP至少运行在一个进程上。

所有APP进程都由Zygote进程fork生成。

4、Android系统里的Client/Server模式

平时我们所熟知的前端(Web\Android\iOS)通过网络与服务器通信是客户端-服务端模式的体现,而在Android Framework中,四大组件的创建、生命周期也是通过这样的模式进行通信:

服务器端(server)指的就是SystemServer进程,这个进程提供了很多服务,比如AMS、PMS、WMS等等,所有的APP进程都可以与其通信。

客户端(client)指的就是各个独立的APP进程。

Android开发中,我们可以通过Package包名和Activity类名,来打开一个APP。实际上,项目里的业务代码startActivity()方法并不是直接创建进程、拉起APP的。而是通过一系列的调用,把请求传递给SystemServer的AMS。AMS收到来自客户端的请求后,再通知zygote进程来fork一个新进程,来开启我们的目标APP。APP中所有Activity的生命周期过程,都由AMS(SystemServer进程)统一调度,并在APP自身进程中具体完成。

这个过程涉及到3个进程:APP进程、SystemServer进程、Zygote进程。

APP进程与SystemServer进程通过Binder机制,进行跨进程通信。

SystemServer进程与Zygote进程通过Socket,进行跨进程通信。

5、Android Binder机制

在Android系统中,一个进程的空间,分为用户空间和内核空间两部分。进程内的用户空间和内核空间可以进行数据交互。进程间的用户空间是隔离开来的,只有内核空间能进行数据交互。

APP进程与SystemServer进程的交互,就是通过Binder机制进行跨进程通信(IPC),实现进程间的内核数据交互过程。Android专门设计了2个Binder接口,用作交互使用。

IApplicationThread: 作为系统进程请求应用进程的接口。

IActivityManager: 作为应用进程请求系统进程的接口。

总结

在Android中,所有应用都是一个独立的进程。

每个应用进程都是由Zygote进程fork出来的。

应用启动是一个跨进程的复杂工作,应用启动流程主要是围绕着SystemServer的ActivityManagerService和应用进程的ActivityThread展开的。

APP应用的启动流程内容比较多,可以通过Launcher响应屏幕点击、APP进程的创建、Application初始化、UI布局和绘制这四部分来理解。

以上就是我对安卓app启动流程进行的分析。那么作为APP的开发者,当然希望自己的APP启动速度非常快,那么就需要深入到底层,深入到Framework层学习,如果你没有合适的学习资料,这里分享一份由字节跳动大佬手写的《Android11.0最新 Framework解析》内部培训学习笔记,带你深度解析Framework层。

文末直接领取
安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?_第2张图片
由于文档内容过多,为了避免影响到大家的阅读体验,下文只以截图展示部分内容,需要完整版1595页的《Android11.0 最新Framework解析》,文末免费领取

第一章-系统启动

  • 第一节-Android系统架构

  • 第二节-Android是怎么启动的

  • 第三节-Android 11.0系统启动之init进程

  • 第四节-Android11.0系统启动之Zygote进程

  • 第五节-Android 11.0 系统启动之SystemServer进程

  • 第六节-Android 11.0 系统服务之ActivityMnagerService-AMS启动流程

  • 第七节-Android11.0系统启动之Launcher(桌面)启动流程

  • 第八节-Android11.0应用进程创建过程以及Zygote的fork流程

  • 第九节-Android 11.0 PackageManagerService(一)工作原理及启动流程

  • 第十节-Android 11.0 PackageManagerService-APK安装流程

安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?_第3张图片

第二章-日志系统篇

  • 第一节-Android11.0 日志系统分析-logd、logcat 指令说明、分类和属性

第三章-Binder通信原理

  • 第一节-Android11.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要

  • 第二节-Android11.0 Binder通信原理(二)-Binder入门篇

  • 第三节-Android11.0 Binder通信原理(三)-ServiceManager篇

  • 第四节-Android11.0 Binder通信原理(四)-Native-C\C++实例分析

  • 第五节-Android11.0 Binder通信原理(五)-Binder驱动分析

  • 第六节-Android11.0 Binder通信原理(六)-Binder数据如何完成定向打击

  • 第七节-Android11.0 Binder通信原理(七)-Framework binder示例

  • 第八节-Android11.0 Binder通信原理(八)-Framework层分析

  • 第九节-Android11.0 Binder通信原理(九)-AIDL Binder示例

  • 第十节-Android11.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式

  • 第十一节-Android11.0 Binder通信原理(十一)-Binder总结

安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?_第4张图片

第四章-HwBinder通信原理

  • 第一节-HwBinder入门篇-Android10.0 HwBinder通信原理(一)

  • 第二节-HIDL详解-Android10.0 HwBinder通信原理(二)

  • 第三节-HIDL示例-C++服务创建Client验证-Android10.0 HwBinder通信原理(三)

  • 第四节-HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)

  • 第五节-HwServiceManager篇-Android10.0 HwBinder通信原理(五)

  • 第六节-Native层HIDL服务的注册原理-Android10.0 HwBinder通信原理(六)

  • 第七节-JAVA层HIDL服务的注册原理-Android10.0 HwBinder通信原理

  • 第八节-HwBinder驱动篇-Android10.0 HwBinder通信原理

安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?_第5张图片

第五章-编译原理

  • 第一节-编译系统入门篇-Android10.0编译系统

  • 第二节-编译环境初始化-Android11.0编译系统

  • 第三节-make编译过程-Android11.0编译系统(三)

  • 第四节-Image打包流程-Android11.0编译系统(四)

  • 第五节-Kati详解-Android11.0编译系统

  • 第六节-Blueprint简介-Android11.0编译系统-

  • 第七节-Blueprint代码详细分析-Android11.0编译系统

安卓app应用启动流程详解,整个启动过程,复杂的底层交互,你知道多少?_第6张图片

需要完整版1595页的《Android11.0 最新Framework解析》,文末点击卡片免费领取

你可能感兴趣的:(Android开发,Framework,android,交互,ui)