解決 APP啓動白屏黑屏問題

閃屏頁簡介

閃屏頁,咱們手機上的每一個 APP 幾乎都有本身的閃屏頁,就是在真正進入程序前,會有一個頁面停頓幾秒鐘。其實咱們徹底能夠充分利用好這幾秒鐘作不少的程序初始化了啓動。 java

聲明

爲何個人 APP 啓動會白屏或者黑屏

有時候咱們會發現,咱們在啓動咱們本身的 APP 的時候,老是有那麼點時間是白屏(黑屏),通過了白屏(黑屏)後纔會進入咱們的 APP。那麼這是爲何呢?android

模擬效果

下面咱們模擬一下白屏的效果 markdown

20190522-splash開啓.gif

能夠看到打開 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 出如今應用程序進程建立而且初始化完成以前,是個臨時的窗口,對應的 WindowTypeTYPE_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

  1. 繪製背景
  2. 繪製 View 自己的內容
  3. 繪製子 View
  4. 繪製修飾內容(例如滾動條)

解決黑白屏問題

經過上面咱們已經知道爲何會出現這個問題了,那麼解決起來就很簡單了,只須要給啓動頁的樣式添加一個背景就能夠了,這樣就達到了秒開的效果了!spa

<style name = "SplashThem" parent = "AppTheme"> <item name = "android:windowBackground">@drawble/splash</item> <item name = "android:windwoFullscreen">true</item> </style>
設置的這個背景要和個人啓動頁搭配起來就好了!
複製代碼

我的號.png

更多分享,公衆號

參考:blog.csdn.net/yanzhenjie1….net

相關文章
相關標籤/搜索