Android啟動(dòng)頁出現(xiàn)白屏、黑屏的解決方案
歷史原因
當(dāng)系統(tǒng)啟動(dòng)一個(gè)APP時(shí),zygote進(jìn)程會(huì)首先創(chuàng)建一個(gè)新的進(jìn)程去運(yùn)行這個(gè)APP,但是進(jìn)程的創(chuàng)建是需要時(shí)間的,在創(chuàng)建完成之前,界面是呈現(xiàn)假死狀態(tài)的,這就很尷尬了,因?yàn)橛脩魰?huì)以為沒有點(diǎn)到APP而再次點(diǎn)擊,這極大的降低用戶體驗(yàn),Android需要及時(shí)做出反饋去避免這段迷之尷尬。于是系統(tǒng)根據(jù)你的manifest文件設(shè)置的主題顏色的不同來展示一個(gè)白屏或者黑屏。而這個(gè)黑(白)屏正式的稱呼應(yīng)該是Preview Window,即預(yù)覽窗口。
好了,現(xiàn)在我們明白了,Preview Window其實(shí)是為了提高用戶體驗(yàn)而有意設(shè)定的。因此,其實(shí)如果不是強(qiáng)迫癥,它可能并不是一個(gè)問題。
但是我猜大部分小伙伴應(yīng)該是和我一樣的強(qiáng)迫癥患者:這么丑的黑屏怎么能出現(xiàn)在我的APP上呢????。?!
所以,下面我們就來聊聊這個(gè)問題的解決方案。
引言
目前app的設(shè)計(jì)思路,都會(huì)有一個(gè)啟動(dòng)頁,來進(jìn)行一些數(shù)據(jù)的初始化等一些比較耗時(shí)的操作,這就會(huì)造成啟動(dòng)頁短暫的白屏或者黑屏(黑還是白取決于你的默認(rèn)主題)。那么,如何解決這種問題的?今天介紹一種比較完美的解決方案:layer_list疊加層。
如果你的啟動(dòng)頁,是一張靜態(tài)圖片,那么這種方式非常適合你。
一般來說,啟動(dòng)頁都不會(huì)很花哨,標(biāo)準(zhǔn)的都是一個(gè)logo+app名字,上下排列。類似于下圖:
QQ音樂啟動(dòng)頁
如果是這樣的,那就是最簡(jiǎn)單的,找UI切幾張logo+文字的圖,按照x xx xxx放好,然后drawable文件夾中新建一個(gè)layer_splash.xml文件:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 整體的背景顏色 --> <item android:drawable="@color/white" /> <item> <!-- 中間的圖片 --> <bitmap android:gravity="center" android:src="@drawable/icon_welcome" android:scaleType="center" /> </item> </layer-list>
然后在你的清單文件中,給啟動(dòng)頁Activity單獨(dú)設(shè)置一個(gè)主題:SplashAppTheme,并在其中引用剛才新建的疊加層布局文件,大功告成!這種方式可以做到秒開,無需任何等待。
<style name="SplashAppTheme" parent="android:Theme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowBackground">@drawable/layer_splash</item> </style>
但是,如果你的啟動(dòng)頁不是這種布局,而是類似于下圖這種:
微博
上下布局,間隔較大,而且上下之間的布局不固定(根據(jù)機(jī)型屏幕大小自動(dòng)適應(yīng)),這種,該如何處理呢?UI妹紙又要求不能等比例放大顯示,說那樣很丑吧啦吧啦吧。。。
其實(shí)我們可以這樣:把上下布局切開,然后就變成了這樣:
splash_top
splash_bottom
我們的xml文件這樣寫:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 整體的背景顏色 --> <item> <color android:color="@color/white" /> </item> <!-- 頂部 --> <item> <bitmap android:gravity="top|center_horizontal" android:scaleType="center" android:src="@drawable/splash_top" /> </item> <!-- 底部 --> <item> <bitmap android:gravity="bottom|center_horizontal" android:scaleType="center" android:src="@drawable/splash_bottom" /> </item> </layer-list>
記得top 和 bottom要根據(jù)不同尺寸的啟動(dòng)頁圖片進(jìn)行切割,這樣就完美解決了各種分辨率屏幕的適配問題(包括平板)。
如果你的啟動(dòng)頁比較簡(jiǎn)潔,和我說的這兩種情況差不多,你完全可以不給啟動(dòng)頁Activity設(shè)置布局文件(setContentView()),只使用疊加層作為布局顯示。
如果你的app啟動(dòng)頁比較花哨或者不規(guī)則,你也可以利用這種方式,增加一個(gè)比較簡(jiǎn)潔的app啟動(dòng)圖片的疊加層布局,作為啟動(dòng)頁的主題進(jìn)行加載,啟動(dòng)初始化完了再進(jìn)行頁面的變化等操作,也可做到秒啟動(dòng),不再忍受白屏或者黑屏。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Android實(shí)現(xiàn)啟動(dòng)頁倒計(jì)時(shí)效果
- Android 啟動(dòng)頁白屏解決方案
- 完美解決Android App啟動(dòng)頁有白屏閃過的問題
- android中使用react-native設(shè)置應(yīng)用啟動(dòng)頁過程詳解
- Android啟動(dòng)頁用戶相關(guān)政策彈框的實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)漸變啟動(dòng)頁和帶有指示器的引導(dǎo)頁
- Android項(xiàng)目實(shí)戰(zhàn)教程之高仿網(wǎng)易云音樂啟動(dòng)頁實(shí)例代碼
- Android啟動(dòng)頁廣告(騰訊廣告聯(lián)盟)解決方法及源碼下載
- Android啟動(dòng)頁面定時(shí)跳轉(zhuǎn)的三種方法
- Android優(yōu)化之啟動(dòng)頁去黑屏實(shí)現(xiàn)秒啟動(dòng)
- Android啟動(dòng)頁優(yōu)化之實(shí)現(xiàn)應(yīng)用秒開
相關(guān)文章
Android日期選擇器實(shí)現(xiàn)年月日三級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android日期選擇器實(shí)現(xiàn)年月日三級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Android基礎(chǔ)之獲取LinearLayout的寬高
LinearLayout是線性布局控件,它包含的子控件將以橫向或豎向的方式排列,按照相對(duì)位置來排列所有的widgets或者其他的containers,超過邊界時(shí),某些控件將缺失或消失。有的時(shí)候,我們需要想獲取LinearLayout寬高,下面通過這篇文章來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11Android實(shí)現(xiàn)自定義輪播圖片控件詳解
這篇文章給大家主要介紹了Android實(shí)現(xiàn)自定義輪播圖片控件的詳細(xì)過程,文中通過實(shí)例代碼介紹的很詳細(xì),相信會(huì)對(duì)大家的理解和學(xué)習(xí)很有幫助,感興趣的朋友們下面來一起看看吧。2016-10-10Android使用getIdentifier()獲取資源Id的方法
這篇文章主要介紹了Android使用getIdentifier()獲取資源Id的方法,涉及Android針對(duì)控件資源的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08Android ViewPager畫廊效果詳解及實(shí)例
這篇文章主要介紹了Android ViewPager畫廊效果詳解及實(shí)例的相關(guān)資料,這里提供實(shí)例代碼及實(shí)現(xiàn)效果圖,具有參考價(jià)值,需要的朋友可以參考下2016-12-12Android圖像切換器imageSwitcher的實(shí)例應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android圖像切換器imageSwitcher的實(shí)例應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10