很多時候,我們啟動APP時會有短暫的白屏或者黑屏,大概1~2秒后,才會顯示主界面或者顯示啟動頁,這是為什么呢?本篇文章來介紹一下,并給出APP啟動秒開的解決辦法。
1、為什么APP啟動時會出現白屏或者黑屏?
當打開一個Activity時,如果這個Activity所屬的應用還沒有在運行,系統會為這個Activity所屬的應用創建一個進程,但進程的創建與初始化都需要時間,在這個動作完成之前系統要做什么呢?如果沒有任何反應的話,如果程序初始化的時間很長,用戶可能還以為沒有點到相應的位置。但此時所啟動的程序還沒初始化完,既無法顯示程序,又不能停在原處不做任何動作,怎么辦?這就有了Starting Window的概念,也可以稱之為Preview Window。
Starting Window就是一個用于在應用程序進程創建并初始化成功前顯示的臨時窗口,擁有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前顯示這個窗口,以告知用戶系統已經知道了他要打開這個應用并做出了響應,當程序初始化完成后顯示用戶UI并移除這個窗口。
顯示白屏或者黑屏,是由你的啟動Activity或者Application來決定的。如果你使用的是Light主題,那么就可能出現白屏;如果你使用的是Black主題,那么就可能出現黑屏。當你設置Light或者Black主題時,Starting Window顯示的就是你啟動Activity的android:windowBackground屬性,所以才會出現白屏或者黑屏的情況。
2、怎么解決啟動白屏或者黑屏問題呢?
在style.xml文件中為啟動的Activity設置主題,設置android:windowBackground屬性為啟動Activity顯示的閃屏圖片,這樣才有APP秒開的效果。設置android:windowFullscreen屬性為true,使閃屏圖片全屏顯示。設置windowNoTitle屬性為true,隱藏Activity的ActionBar顯示。
<!-- 防止歡迎頁白屏或者黑屏,設置圖片 -->
<style name="SplashTheme" parent="AppBaseTheme">
<item name="android:windowBackground">@drawable/img_welcome</item>
<item name="android:windowFullscreen">true</item>
<item name="windowNoTitle">true</item>
<!--<item name="android:windowIsTranslucent">false</item>-->
<!--<item name="android:windowDisablePreview">true</item>-->
</style>
然后,在清單文件AndroidManifest.xml中,為啟動的Activity設置主題SplashTheme。
<activity android:name=".ui.WelcomeActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
此外,如果設置android:windowIsTranslucent屬性,表明該窗口是半透明的,這樣也不會出現白屏或者黑屏。但是,它和MainActivity的顯示是同步,如果在MainActivity啟動的時候,有過多復雜的操作,就會出現在手機中點擊了應用程序的圖標之后,但過兩秒才會打開應用程序不好的卡頓體驗效果。
如果設置android:windowDisablePreview屬性,禁用窗口的預覽動畫, 在MainActivity顯示之前,系統永遠不會使用窗口的主題來顯示它的預覽,這也保證了不會出現白屏或者黑屏。但是,與設置android:windowIsTranslucent屬性一樣,如果在MainActivity啟動的時候,有過多復雜的操作,就會出現在手機中點擊了應用程序的圖標,但過兩秒才會打開應用程序不好的卡頓體驗效果。
3、還有沒有其他解決方案?
以上方式可以實現APP秒開,但是我不想顯示一張圖片,那么你也可以顯示純顏色,或者純顏色加小圖標。
Starting Window顯示純顏色,直接設置android:windowBackground屬性為顏色代碼:
<item name="android:windowBackground">@color/colorAccent</item>
Starting Window顯示純顏色加圖標,需要在Drawable中定義一個splash.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 背景顏色 -->
<item android:drawable="@color/green" /> <item>
<!-- 圖片 -->
<bitmap android:gravity="center" android:src="@drawable/icon_welcome" /> </item>
</layer-list>
<!-- 防止歡迎頁白屏或者黑屏,設置圖片 -->
<style name="SplashTheme" parent="AppBaseTheme">
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowFullscreen">true</item>
<item name="windowNoTitle">true</item>
</style>
原文地址:http://sendtion.cn/archives/506
如有疑問,歡迎指正!
參考文章:
http://www.cnblogs.com/angeldevil/p/3801209.html
http://blog.csdn.net/yanzhenjie1003/article/details/52201896
http://blog.csdn.net/wangjiang_qianmo/article/details/51736418