LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

Android Splash页面

App开发中,我们会发现启动App的时候,应用会先黑屏或者白屏后才进入到我们的第一个页面,这是因为当我们打开App时,我们的App可能还没初始化完成,系统为了响应我们的操作,首先会启动一个WindowTypeTYPE_APPLICATION_STARTINGWindow,等App初始化完成后在移除这个Window,所以我们看到的黑屏和白屏也就是这个Window了。

但是为什么有的是黑的有的是白的呢,因为这个Window默认会显示一个空的DecorView(Window顶层视图),这个DecorView会应用Splash页面所在ActivityTheme,如果没有指定,那么就会用ApplicationTheme

所以我们可以自定义Splash页面的Theme来解决黑/白屏的问题,比如我们自定义的Theme如下:

<style name="SplashTheme" parent="xxx">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

设置后,会发现启动我们的App虽然没有之前的问题了,但是会先延迟一会在进入Splash页面,这是因为我们把Window设置为透明的了,所以用户就会感觉我们的App启动缓慢。

如果对这样的设置不满意,我们可以给这个Window自定义一个背景,比如先自定义一个layer-list命名为open_splash.xml,注意这个layer-list内容最好和Splash页面相同,这样用户就会无感知了,如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/splash_page_color" />

    <item>
        <bitmap
            android:gravity="bottom"
            android:src="@drawable/splash_bottom" />
    </item>
</layer-list>

然后修改我们的Theme,如下:

<style name="SplashTheme" parent="xxx">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowBackground">@drawable/open_splash</item>
</style>

此时在启动,我们就可以流畅的看到App的启动了。