解决 APP启动白屏黑屏问题
閃屏頁(yè)簡(jiǎn)介
閃屏頁(yè),我們手機(jī)上的每個(gè) APP 幾乎都有自己的閃屏頁(yè),就是在真正進(jìn)入程序前,會(huì)有一個(gè)頁(yè)面停頓幾秒鐘。其實(shí)我們完全可以充分利用好這幾秒鐘做很多的程序初始化了啟動(dòng)。
為什么我的 APP 啟動(dòng)會(huì)白屏或者黑屏
有時(shí)候我們會(huì)發(fā)現(xiàn),我們?cè)趩?dòng)我們自己的 APP 的時(shí)候,總是有那么點(diǎn)時(shí)間是白屏(黑屏),經(jīng)過(guò)了白屏(黑屏)后才會(huì)進(jìn)入我們的 APP。那么這是為什么呢?
模擬效果
下面我們模擬一下白屏的效果
可以看到打開(kāi) APP 的時(shí)候會(huì)有白屏的現(xiàn)象出現(xiàn),當(dāng)然我的這個(gè)演示 APP 程序沒(méi)有那么復(fù)雜,因此我為了實(shí)現(xiàn)這種效果,就在 Application 中做了個(gè)睡眠。
@Overridepublic void onCreate() {super.onCreate();myApplication = this;try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}這樣就是出現(xiàn)了這種白屏的效果,由此可以得出結(jié)論,如果程序很復(fù)雜,并且有很多的初始化放到了 Application 中去完成了,那么這個(gè)時(shí)候剛打開(kāi)程序的時(shí)候就會(huì)有個(gè)耗時(shí),就會(huì)出現(xiàn)白屏的效果。
所以這里程序加載有個(gè)順序,當(dāng)打開(kāi)一個(gè) Activity 的時(shí)候,并且這個(gè) Activity 所屬的 Application 還沒(méi)有運(yùn)行,系統(tǒng)會(huì)首先為這個(gè) Activity 創(chuàng)建一個(gè)進(jìn)程,創(chuàng)建進(jìn)程的時(shí)候就會(huì)調(diào)用 Application 的 onCreate 方法。進(jìn)程的創(chuàng)建和 onCreate 內(nèi)部的初始化是需要時(shí)間的,如果這個(gè)時(shí)候過(guò)長(zhǎng),沒(méi)有任何反應(yīng)的話,那么對(duì)于用戶來(lái)說(shuō)是不不知道的,用戶還以為自己沒(méi)有點(diǎn)到呢,所以很顯然是不可能在原頁(yè)面等待加載的,那么這個(gè)時(shí)候就有了 StartingWindow(PerviewWindow)的出現(xiàn),StartingWindow 出現(xiàn)在應(yīng)用程序進(jìn)程創(chuàng)建并且初始化完成之前,是個(gè)臨時(shí)的窗口,對(duì)應(yīng)的 WindowType是 TYPE_APPLICATION_STARTING 作用就是告訴用戶,系統(tǒng)已經(jīng)收到我們的操作了,正在對(duì)程序進(jìn)行初始化,只要初始化完畢后就會(huì)移除這個(gè)窗口。
所以其實(shí)我們看到的白屏或者黑屏就是 StartingWindow,那么為什么是白色或者黑色呢?我們一般都會(huì)給我們的 Application 和 Activity 設(shè)置 Theme,系統(tǒng)就會(huì)根據(jù)我們所設(shè)置的 Theme 來(lái)決定 StartingWindow 的顏色。我們都知道 Window 布局的頂層是 DecorView,而 StaringWindow 顯示的是一個(gè)空的 DecorView,只是這個(gè) DecorView 會(huì)應(yīng)用我們的這個(gè) Activity 所指定的 Theme。我們默認(rèn)的 Theme 是 @android:style/Theme.Light 的話,這個(gè)時(shí)候就會(huì)產(chǎn)生白屏了。黑屏就是應(yīng)用了 @android:style/Theme.Black,好了到這里我們就徹底明白為什么會(huì)出現(xiàn)白屏或者黑屏了。再順便說(shuō)一下 Activity 布局的繪制順序:
解決黑白屏問(wèn)題
通過(guò)上面我們已經(jīng)知道為什么會(huì)出現(xiàn)這個(gè)問(wèn)題了,那么解決起來(lái)就很簡(jiǎn)單了,只需要給啟動(dòng)頁(yè)的樣式添加一個(gè)背景就可以了,這樣就達(dá)到了秒開(kāi)的效果了!
<style name = "SplashThem" parent = "AppTheme"><item name = "android:windowBackground">@drawble/splash</item><item name = "android:windwoFullscreen">true</item> </style> 設(shè)置的這個(gè)背景要和我的啟動(dòng)頁(yè)搭配起來(lái)就行了!參考:https://blog.csdn.net/yanzhenjie1003/article/details/52201896
轉(zhuǎn)載于:https://www.cnblogs.com/sydmobile/p/10913494.html
總結(jié)
以上是生活随笔為你收集整理的解决 APP启动白屏黑屏问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nodejs基础学习-文件读取
- 下一篇: 关于时间类型数据的转换