版權聲明:本文為HaiyuKing原創文章,轉載請注明出處!
前言
StartingWindow 的處理方式:
- 使用系統默認的 StartingWindow :用戶點了應用圖標啟動應用,馬上彈出系統默認的 StartingWindow(就是做動畫的那個 Window) ,等應用加載好第一幀之后,StartingWindow 消失,顯示應用第一幀,無縫銜接,體驗還不錯,這也是通常大部分 Android 應用的場景;比如大部分 Android 系統的自帶應用,即刻、汽車之家等
- 自己定制簡單的 StartingWindow :用戶點了應用圖標啟動應用,彈出應用自己定制的StartingWindow,等應用加載好第一幀之后,定制的 StartingWindow 消失,顯示應用主界面,由於 StartingWindow 是自己定制的,啟動的時候 Decode Bitmap 或者 Inflate 自定義 Layout 會有一定的耗時,但是總的來說與系統默認的差別不大,用戶體驗優;這樣的應用包括淘寶、京東、微博、今日頭條、美團等
- 把 StartingWindow 禁掉或者設置透明 :用戶點了應用圖標啟動應用,由於 StartingWindow 被禁掉或者被設置透明,所以會出現點擊圖標后,除了圖標黑一下之外沒有任何響應,過個 1-N 秒(取決於應用第一幀的加載速度),直接顯示應用主界面。這樣的毒瘤應用包括:微信、微信讀書、UC 瀏覽器、支付寶、工商銀行、米家等。
-------摘自《知乎 救救你的 StartingWindow》
android開發者應該都有這樣的體會:開發到一定的階段,包變得很大了,每次啟動APP的時候,總是有白屏一閃而過(白屏的時間和包的大小成正比!)。
-------摘自《Android APP啟動白屏優化》
本文講的是第二種處理方式。
效果圖
未處理之前:

處理之后(純顏色):

處理之后(背景圖片):

代碼分析
暫無
使用步驟
一、項目組織結構圖


注意事項:
1、 導入類文件后需要change包名以及重新import R文件路徑
2、 Values目錄下的文件(strings.xml、dimens.xml、colors.xml等),如果項目中存在,則復制里面的內容,不要整個覆蓋
二、導入步驟
1、在styles.xml文件中添加以下代碼
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <!-- 應用啟動頁(StartingWindow)的theme --> <style name="AppTheme.StartingWindowTheme" parent="AppTheme"> <!-- 可以設置成純顏色(設置一個和Activity UI相似的背景) --> <!--<item name="android:windowBackground">@color/startingwindow_bgcolor</item>--> <!--也可以設置成一張圖片 --> <item name="android:windowBackground">@drawable/startingwindow_bg</item> </style> </resources>
2、在colors.xml文件中添加以下代碼【根據實際情況來添加,如果使用純顏色作為啟動頁白屏的背景的話,則需要添加】
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <!-- 應用啟動頁(StartingWindow)的theme的背景色 --> <color name="startingwindow_bgcolor">#00bfff</color> </resources>
2、將背景圖片添加到項目中【Demo中的背景圖片是參考《簡書APP》制作的】【根據實際情況添加,一般會使用】


3、在AndroidManifest.xml中給首頁activity(第一個頁面,一般是歡迎界面)設置自定義的theme
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.why.project.androidstartingwindowdemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <!--將首頁的them設置成自定義的樣式--> <activity android:name=".MainActivity" android:theme="@style/AppTheme.StartingWindowTheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
4、在Activity中恢復原有的style樣式【否則的話,當activity的布局文件設置背景色為透明的時候,就會發現窗口的背景還是那張圖片】
package com.why.project.androidstartingwindowdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.AppTheme);//恢復原有的樣式 setContentView(R.layout.activity_main); } }
三、使用方法
擴展:如果在styles.xml文件中將啟動頁窗口背景圖片(android:windowBackground)設置為歡迎界面的背景圖片,然后歡迎界面布局文件中將背景(android:background)設置為透明,Activity中不恢復原有的樣式,那么這樣就可以實現APP啟動后白屏部分和歡迎界面是同一張背景圖片。
需要注意,如果將之前歡迎界面的背景圖片作為窗口背景圖片,那么就需要考慮到底部導航欄的高度的問題。否則背景圖片的底部會被遮蓋住。所以可能需要重新調整歡迎界面的背景圖片。
混淆配置
無
