前言
1、什么是Android的冷启动时间?
冷启动时间是指点击桌面LOGO那一刻起到启动页面的Activity调用onCreate()之前的时间段。
2、冷启动的时间段内发生了什么?
在一个Activity打开时,如果Application还没有启动,系统会创建一个进程,进程的创建和初始化会消耗一些时间,在这个时间中,WindowManager会先加载APP的主题样式里的窗口背景(windowBackground)作为预览元素,然后才会真正的加载布局,如果这个时间过长,会给用户造成一种错觉:APP卡顿不流畅
常见做法
- 将背景设置为APP Logo,市面上大部分APP都是这么做的
1 2 3 |
<style name="AppTheme" parent="BaseTheme"> <item name="android:windowBackground">@drawable/window_splash_screen_content</item> </style> |
- 将背景设置为透明色,当点击桌面LOGO时并不会立即启动APP,而是在桌面停留一会(其实已经启动)
1 2 3 |
<style name="AppTheme" parent="BaseTheme"> <item name="android:windowBackground">@android:color/transparent</item> </style> |
上面做法可以达到秒开效果,但属于掩耳盗铃。
Android 8.0
Google以前不推荐使用闪屏的使用,但是后来很多APP都在使用闪屏,Google希望让启动屏的制作更简单。
Android Oreo中提供了Splash Screen API,允许开发者把一个drawable资源设置为闪屏。
新建values-v26目录:
1 2 3 4 5 |
<resources> <style name="AppTheme" parent="BaseTheme"> <item name="android:windowSplashscreenContent">@drawable/window_splash_screen_content</item> </style> </resources> |
通过windowSplashscreenContent设置的drawable资源将会覆盖在windowBackground顶部,在系统状态栏之下,如果不想受到System Bars限制,请使用全屏主题。