閃屏頁,咱們手機上的每一個 APP 幾乎都有本身的閃屏頁,就是在真正進入程序前,會有一個頁面停頓幾秒鐘。其實咱們徹底能夠充分利用好這幾秒鐘作不少的程序初始化了啓動。 java
有時候咱們會發現,咱們在啓動咱們本身的 APP 的時候,老是有那麼點時間是白屏(黑屏),通過了白屏(黑屏)後纔會進入咱們的 APP。那麼這是爲何呢?android
下面咱們模擬一下白屏的效果 markdown
能夠看到打開 APP 的時候會有白屏的現象出現,固然個人這個演示 APP 程序沒有那麼複雜,所以我爲了實現這種效果,就在 Application 中作了個睡眠。ide
@Override public void onCreate() { super.onCreate(); myApplication = this; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } 複製代碼
這樣就是出現了這種白屏的效果,由此能夠得出結論,若是程序很複雜,而且有不少的初始化放到了 Application 中去完成了,那麼這個時候剛打開程序的時候就會有個耗時,就會出現白屏的效果。oop
因此這裏程序加載有個順序,當打開一個 Activity 的時候,而且這個 Activity 所屬的 Application 尚未運行,系統會首先爲這個 Activity 建立一個進程,建立進程的時候就會調用 Application 的 onCreate 方法。進程的建立和 onCreate 內部的初始化是須要時間的,若是這個時候過長,沒有任何反應的話,那麼對於用戶來講是不不知道的,用戶還覺得本身沒有點到呢,因此很顯然是不可能在原頁面等待加載的,那麼這個時候就有了 StartingWindow(PerviewWindow)的出現,StartingWindow
出如今應用程序進程建立而且初始化完成以前,是個臨時的窗口,對應的 WindowType
是 TYPE_APPLICATION_STARTING
做用就是告訴用戶,系統已經收到咱們的操做了,正在對程序進行初始化,只要初始化完畢後就會移除這個窗口。佈局
因此其實咱們看到的白屏或者黑屏就是 StartingWindow
,那麼爲何是白色或者黑色呢?咱們通常都會給咱們的 Application 和 Activity 設置 Theme,系統就會根據咱們所設置的 Theme 來決定 StartingWindow 的顏色。咱們都知道 Window 佈局的頂層是 DecorView,而 StaringWindow 顯示的是一個空的 DecorView,只是這個 DecorView 會應用咱們的這個 Activity 所指定的 Theme。咱們默認的 Theme 是 @android:style/Theme.Light
的話,這個時候就會產生白屏了。黑屏就是應用了 @android:style/Theme.Black
,好了到這裏咱們就完全明白爲何會出現白屏或者黑屏了。再順便說一下 Activity 佈局的繪製順序:this
經過上面咱們已經知道爲何會出現這個問題了,那麼解決起來就很簡單了,只須要給啓動頁的樣式添加一個背景就能夠了,這樣就達到了秒開的效果了!spa
<style name = "SplashThem" parent = "AppTheme"> <item name = "android:windowBackground">@drawble/splash</item> <item name = "android:windwoFullscreen">true</item> </style> 設置的這個背景要和個人啓動頁搭配起來就好了! 複製代碼
參考:blog.csdn.net/yanzhenjie1….net