Android冷热启动优化

1、冷启动与热启动简介

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

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

两者之间的特点如下:

  • 冷启动:系统会重新创建一个新的进程分配给该应用,从Application创建到UI绘制等相关流程都会执行一次。
  • 热启动:应用还在后台,因此该启动方式不会重建Application,只会重新绘制UI等相关流程。

冷启动流程分析:

  • 创建进程:启动APP、加载空白Window、创建进程
  • 启动应用:创建Application、启动ActivityThread、创建Activity
  • 开启绘制

2、计算启动时间

Activity启动事件计算指令(适用于线下):

1
adb shell am start -W [packageName]/[packageName.XxxActivity]

输出参数:

1
2
3
4
5
6
Status: ok
Activity: com.markzl.android.simpleapplication/.HelloActivity
ThisTime: 426
TotalTime: 426
WaitTime: 444
Complete

1、ThisTime:一般和TotalTime时间一样。除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity,这样将比TotalTime小。

2、TotalTime:应用的启动时间。包含创建进程+Application初始化+Activity初始化到界面显示。

3、WaitTime:一般比TotalTime大点,包含系统影响的耗时。

TraceView(可埋点)

1
2
3
Debug.startMethodTracing("simple.trace");
...
Debug.stopMethodTracing();

文件目录 Android/data/包名/files

优化

通过设置在window空白时添加主题

1
2
3
4
5
6
7
8
9
<activity
android:name=".HelloActivity"
android:theme="@style/Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1
2
3
4
<style name="Splash" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowFullscreen">true</item>
</style>

在 HelloActivity 的Activity方法之前重新设置回原主题。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×