消灭黑白屏,实现 android app“快速启动”

3,193 阅读2分钟
原文链接: blog.csdn.net

进行应用开发时,如果没有对app的启动页做处理,那我们的app冷启动时就会出现一个白屏或者黑屏的过程,正是这个黑白屏过程的存在会让用户感觉app启动速度慢,本篇博客中所说的“快速启动“”也正是针对这个过程进行优化以达到没有黑白屏的过程;

关于app的冷启动:
冷启动是指在进程未创建时,用户从launcher点击图标启动app的过程。在此过程中,系统需要为app创建一个进程,进程的创建和初始化是耗时的。

我们都知道activity的绘制也是需要时间的,所以Android系统框架设计了一个叫做startWindow的窗口,在activity的window绘制完成之前,让startWindow显示在我们的手机屏幕上,直到activity准备完成再显示activity,前面说的黑白屏其实也就是我们app的SplashActivity绘制完成前的startWindow。

而startWindow的background与我们要启动的activity的主题中windowBackground是一样的,所以一切就变得很简单了:首先自定义theme,splashActivity一般也都是一张全屏显示的大图或者广告viewpager

<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash01</item>//这里的图片设置为splashActivity全屏显示的第一张图片
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
另外加上将状态栏全透明化:

values-v21

<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@drawable/splash01</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>//状态栏颜色设置为透明
</style>
values-v19

<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@drawable/splash01</item>
    <item name="android:windowTranslucentStatus">true</item>//透明状态栏
</style>
然后将自定义的主题应用给对应的activity就好了。

有一点需要注意:

    <item name="android:windowIsTranslucent">true</item>//设置activity的window为透明窗口

如果加入上面一句代码将Window设置为了透明,在桌面点击启动图标时由于绘制的startWindow是全透明的,会导致表现出app启动之前会有一段等待时间,因此不建议设置为透明窗口