前言
基本上每個開發(fā)安卓App的人都會遇到一個需求,那就是啟動頁 + 廣告頁的功能。
那么肯定就會有不少的一部分人會遇到這樣的一個問題,就是啟動App的時候,總會有那么一瞬間的白屏,如下:

遇到性能差一點的安卓機(jī),那么這個白屏?xí)拥拿黠@。那么我們應(yīng)該怎么樣去擠掉啟動頁的這一瞬間的空白呢?
PS:
因為改動比較簡單,我也沒有專門去寫一個DEMO,所以直接在當(dāng)前的一個項目中去講解,所以我會在我上一篇文章的一個基礎(chǔ)之上進(jìn)行演示。
1,styles.xml文件添加主題
首先第一步是在styles.xml文件中,添加我們所需要的主題,這個主題會應(yīng)用在啟動頁,如下:
<style name="Theme.Start_ucom" parent="android:Theme">
<item name="android:windowBackground">@drawable/start_page_ucom</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
</style>
<style name="Theme.Start_yxj" parent="android:Theme">
<item name="android:windowBackground">@drawable/start_page_yxj</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
</style>
<style name="Theme.Start_xxy" parent="android:Theme">
<item name="android:windowBackground">@drawable/start_page_xxy</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
</style>
PS:
1,我上一篇文章寫過多渠道打包,所以有時候我們需要針對每一個渠道單獨做一個啟動頁 + 廣告頁,所以我在styles.xml文件中為每個渠道包專門定義了各自的一個啟動主題;
2,android:windowBackground,是指啟動頁Activity時,指定展示的背景圖;
3,其它兩個屬性,意思是全屏展示。
2,在app.gradle中的小改動
在上一篇的多渠道打包中,有在app.gradle中定義了每個渠道包的配置信息,那么這次添加啟動頁的主題后,做了一小點改動,改動后的配置信息如下:
// gradlew assemble 多渠道打包 2017/7/24 14:09
productFlavors {
yxj {
manifestPlaceholders = [APP_NAME: "@string/app_name",
APP_START_PAGE: "@style/Theme.Start_yxj",
APP_CHANNEL: "yxj",
APP_ICON: "@drawable/ic_launcher"]
}
ucom {
manifestPlaceholders = [APP_NAME: "@string/app_name_ucom",
APP_START_PAGE: "@style/Theme.Start_ucom",
APP_CHANNEL: "ucom",
APP_ICON: "@drawable/ic_launcher_ucom"]
}
xxy {
manifestPlaceholders = [APP_NAME: "@string/app_name_xxy",
APP_START_PAGE: "@style/Theme.Start_xxy",
APP_CHANNEL: "xxy",
APP_ICON: "@drawable/ic_launcher_xxy"]
}
}
PS:
添加APP_START_PAGE的屬性,分別指定各自需要啟動的主題。
3,改動AndroidManifest.xml
在清單文件AndroidManifest.xml文件中,針對啟動頁添加如下改動:
<activity
android:name=".activity.StartActivity"
android:theme="${APP_START_PAGE}"
android:label="${APP_NAME}"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
PS:
android:theme="${APP_START_PAGE}",動態(tài)指定啟動頁的主題,根據(jù)App的渠道號動態(tài)分配。
4,改動后的效果
經(jīng)過上面3個步驟的改動,那么改動后的演示效果如下:

結(jié)尾
經(jīng)過上面的幾個步驟的配置,我們可以很簡單的刷掉啟動時,透露出來的一瞬間的白屏。
當(dāng)然,如果在啟動頁還需要加入廣告頁,在這里就不詳細(xì)講了,但在這里可以提供一個思路,就是進(jìn)入啟動頁時,動態(tài)訪問后臺服務(wù)器,拉取廣告信息,可以先緩存需要展示的gif或者靜態(tài)圖,下一次進(jìn)入時讀取廣告信息,進(jìn)行展示。
這里需要注意一點的就是,展示的廣告布局一定要設(shè)置一個白色背景色,當(dāng)廣告信息需要展示的時候,才可以擋住之前在主題中設(shè)置的windowBackground信息。
好了,今天關(guān)于啟動頁的白屏問題就講到這里了。
希望對你有所幫助~~~