冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

特点:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

特点:热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。

冷启动优化方案:

1.使用背景图:

在style文件下定义如下主题:

<style name="AppWelcome" parent="AppTheme"> <item name="android:windowBackground">@mipmap/bg_welcome_start</item> </style>

然后在Manifest中将启动页的主题设置为当前主题:

android:theme="@style/AppWelcome"

2.使用透明背景和全屏:

<style name="AppTransparent" parent="AppTheme"> <item name="android:windowFullscreen">true</item> <item name="android:windowIsTranslucent">true</item></style>

或者:

<style name="APPWel" parent="android:Theme.Translucent.NoTitleBar.Fullscreen" />

这种就和微信的处理方式是一样的,APP启动时会有一种因为系统卡顿造成启动较慢的假象。

3.如下几点建议:

尽量不要让Application参与业务的操作

尽量不要在APPlication进行耗时操作,比如有些开发者会在自己的APP里一系列文件夹或文件(比如我自己),这些I/O操作应该放到”确实该使用的时候再去创建”亦或者是数据库的一些操作

尽量不要以静态变量的方式在Application中保存数据等。 4、减少LaunchActivity的View层级,减少View测量绘制时间

此外,可以通过如下方式测量APP冷启动和热启动的时间:

adb shell am start -W [packageName]/[packageName.launchActivity]

本文地址: http://www.yppcat.top/2019/03/08/app冷热启动及优化/