俗话说,要想优化好,流程不可少。作为一款App的开发者,首先要把它的启动流程做好了,简单明了的启动流程不仅拥有很好的体验感,还能获得更多用户对App的肯定。本篇文章就带大家了解下app启动流程的三个进程和六个大类!

一、三个进程

1、Launcher进程:整个App启动流程的起点,负责接收用户点击屏幕事件,它其实就是一个Activity,里面实现了点击事件,长按事件,触摸等事件,可以这么理解,把Launcher想象成一个总的Activity,屏幕上各种App的Icon就是这个Activity的button,当点击Icon时,会从Launcher跳转到其他页面。

2、SystemServer进程:这个进程在整个的Android进程中是非常重要的一个,地位和Zygote等同,它是属于Application Framework层的,Android中的所有服务,例如AMS, WindowsManager, PackageManagerService等等都是由这个SystemServer fork出来的。

3、App进程:你要启动的App所运行的进程。

二、六个大类

1、ActivityManagerService:(AMS)AMS是Android中最核心的服务之一,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要,它本身也是一个Binder的实现类。

2、Instrumentation:监控应用程序和系统的交互。

3、ActivityThread:应用的入口类,通过调用main方法,开启消息循环队列。ActivityThread所在的线程被称为主线程。

4、ApplicationThread:ApplicationThread提供Binder通讯接口,AMS则通过代理调用此App进程的本地方法。

5、ActivityManagerProxy:AMS服务在当前进程的代理类,负责与AMS通信。

6、ApplicationThreadProxy:ApplicationThread在AMS服务中的代理类,负责与ApplicationThread通信。

可以说,APP启动的流程就是通过这六个大类在这三个进程之间不断通信的过程。

启动流程

1、Launcher响应用户点击,通知AMS。

启动的起点发生在Launcher活动中,启动一个app说简单点就是启动一个Activity,那么我们说过所有组件的启动,切换,调度都由AMS来负责的,所以第一步就是Launcher响应了用户的点击事件,然后通知AMS。

2、AMS响应Launcher进程请求

AMS得到Launcher的通知,就需要响应这个通知,主要就是新建一个Task去准备启动Activity,并且告诉Launcher你可以休息了(Paused)。

3、Launcher进程挂起Launcher,再次通知AMS

Launcher得到AMS让自己“休息”的消息,那么就直接挂起,并告诉AMS我已经Paused了。

4、AMS创建新的进程

AMS知道了Launcher已经挂起之后,就可以放心的为新的Activity准备启动工作了,首先,APP肯定需要一个新的进程去进行运行,所以需要创建一个新进程,这个过程是需要Zygote参与的,AMS通过Socket去和Zygote协商,如果需要创建进程,那么就会fork自身,创建一个线程,新的进程会导入ActivityThread类,这就是每一个应用程序都有一个ActivityThread与之对应的原因。

5、应用进程初始化

进程创建好了,通过调用上述的ActivityThread的main方法,这是应用程序的入口,在这里开启消息循环队列,这也是主线程默认绑定Looper的原因。

6、在AMS中注册应用进程,启动启动栈顶页面

这时候,App还没有启动完,要永远记住,四大组建的启动都需要AMS去启动,将上述的应用进程信息注册到AMS中,AMS再在堆栈顶部取得要启动的Activity,通过一系列链式调用去完成App启动。

以上就是对于app启动流程的简单介绍了。每一款app都有它的启动流程,假如它启动的性能没有做好,用户在使用时会降低信任感和使用体验,这样将会流失很多用户。那么我们要做的就是尽可能避免启动过程中出现性能问题,如何从源头避免?可以使用“友盟+u-apm”这款工具进行监测,帮助开发者监测app的问题。

另外,友盟+搭载在U-APM应用性能监控平台上推出了友盟+云真机服务,为移动开发者提供了灵活地测试操作界面,支持ADB调试、WEB远程调试、扫码、抓包、虚拟定位等测试功能,并提供了测试报告供开发者后续查看。