解决 APP启动白屏黑屏问题
閃屏頁簡介
閃屏頁,我們手機上的每個 APP 幾乎都有自己的閃屏頁,就是在真正進入程序前,會有一個頁面停頓幾秒鐘。其實我們完全可以充分利用好這幾秒鐘做很多的程序初始化了啟動。
為什么我的 APP 啟動會白屏或者黑屏
有時候我們會發現,我們在啟動我們自己的 APP 的時候,總是有那么點時間是白屏(黑屏),經過了白屏(黑屏)后才會進入我們的 APP。那么這是為什么呢?
模擬效果
下面我們模擬一下白屏的效果
可以看到打開 APP 的時候會有白屏的現象出現,當然我的這個演示 APP 程序沒有那么復雜,因此我為了實現這種效果,就在 Application 中做了個睡眠。
@Overridepublic void onCreate() {super.onCreate();myApplication = this;try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}這樣就是出現了這種白屏的效果,由此可以得出結論,如果程序很復雜,并且有很多的初始化放到了 Application 中去完成了,那么這個時候剛打開程序的時候就會有個耗時,就會出現白屏的效果。
所以這里程序加載有個順序,當打開一個 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 布局的繪制順序:
解決黑白屏問題
通過上面我們已經知道為什么會出現這個問題了,那么解決起來就很簡單了,只需要給啟動頁的樣式添加一個背景就可以了,這樣就達到了秒開的效果了!
<style name = "SplashThem" parent = "AppTheme"><item name = "android:windowBackground">@drawble/splash</item><item name = "android:windwoFullscreen">true</item> </style> 設置的這個背景要和我的啟動頁搭配起來就行了!參考:https://blog.csdn.net/yanzhenjie1003/article/details/52201896
轉載于:https://www.cnblogs.com/sydmobile/p/10913494.html
總結
以上是生活随笔為你收集整理的解决 APP启动白屏黑屏问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs基础学习-文件读取
- 下一篇: 关于时间类型数据的转换