Android應(yīng)用啟動(dòng)白屏處理方案詳解
正文
相信大家一定遇到過(guò)某些App在手機(jī)桌面打開時(shí)會(huì)出現(xiàn)短暫或者幾秒鐘的白屏情況吧,沒(méi)錯(cuò)那是應(yīng)用程序啟動(dòng)后系統(tǒng)默認(rèn)的背景色,此時(shí)應(yīng)用的第一個(gè)Activity還未被加載出來(lái),所以不管怎么設(shè)置第一個(gè)Activity的背景色都毫無(wú)作用。但細(xì)心的朋友發(fā)現(xiàn),有些App啟動(dòng)時(shí)白屏的時(shí)間又很短幾乎可以忽略不計(jì)呢?今天就分享一篇關(guān)于App冷啟動(dòng)處理白屏?xí)r間過(guò)長(zhǎng)的問(wèn)題。
首先先聊一聊冷啟動(dòng)和熱啟動(dòng):
- 冷啟動(dòng)
殺掉App,此時(shí)的App進(jìn)程不存在于后臺(tái),啟動(dòng)時(shí)從Logo頁(yè)面開始。
- 熱啟動(dòng)
App處于后臺(tái),進(jìn)程未被殺死,重新進(jìn)入前臺(tái)時(shí)頁(yè)面保持上一次頁(yè)面,不會(huì)重新啟動(dòng)。
所以,我們此次所講的屬于冷啟動(dòng)過(guò)程,當(dāng)應(yīng)用程序代碼量小、業(yè)務(wù)邏輯少、體積小時(shí),App啟動(dòng)還是比較快,白屏?xí)r間可以忽略不計(jì)。一旦初始化工具過(guò)多,首頁(yè)業(yè)務(wù)邏輯過(guò)多時(shí)啟動(dòng)速度會(huì)嚴(yán)重變慢,此時(shí)的白屏?xí)r間會(huì)越來(lái)越長(zhǎng),給人一種極差的體驗(yàn)。我們需要做的就是在白屏?xí)r間盡可能快速的展示Logo等圖標(biāo),讓它成為一個(gè)過(guò)渡,待應(yīng)用程序準(zhǔn)備好后跳轉(zhuǎn)到相應(yīng)頁(yè)面以提高用戶體驗(yàn)。
配置一個(gè)SplashActivity
首先,需要配置一個(gè)SplashActivity(應(yīng)用展示的第一個(gè)Activity)的主題
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 將splash圖片設(shè)置在這,這樣這張圖片取代白屏 --> <item name="android:windowBackground">@drawable/logo_drawable</item> <item name="android:windowAnimationStyle">@style/notAnimation</item> <!--將頂部狀態(tài)欄設(shè)置為透明,并將界面內(nèi)容布局上邊界上提至狀態(tài)欄頂部--> <item name="android:windowTranslucentStatus">true</item> <!--如果有底部虛擬導(dǎo)航欄,則將底部虛擬導(dǎo)航欄設(shè)置為透明,并將界面內(nèi)容布局下邊界下沉至虛擬導(dǎo)航欄底部--> <item name="android:windowTranslucentNavigation">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">true</item> </style>
其中windowBackground是我們本次重點(diǎn)配置,windowAnimationStyle是取消頁(yè)面的一些動(dòng)畫效果,一般首頁(yè)我們讓它無(wú)動(dòng)畫,其他設(shè)置根據(jù)自己情況設(shè)置即可。
讓我們來(lái)看看logo_drawable
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <color android:color="#ffffffff"/> </item> <item android:top="208dp" android:bottom="453dp"> <bitmap android:gravity="center" android:src="@mipmap/ic_logo" /> </item> </layer-list>
白色背景上疊加一個(gè)bitmap,這里需要注意的是bitmap外層的item標(biāo)簽一定要根據(jù)設(shè)計(jì)稿配置好上下邊距,否則運(yùn)行App后的效果會(huì)被鋪滿屏幕。
然后我們將上面的主題配置到activity中,此時(shí)SplashActivity的布局文件中可以什么都不寫,因?yàn)樵撝黝}就相當(dāng)于背景,如果此處編寫頁(yè)面可能會(huì)和背景l(fā)ogo重合,僅需要編寫一些邏輯和跳轉(zhuǎn)處理。
<activity android:name=".ui.splash.SplashActivity" android:configChanges="orientation|screenSize" android:exported="true" android:launchMode="singleTop" android:screenOrientation="portrait" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
至此,再次運(yùn)行打開App發(fā)現(xiàn),幾乎點(diǎn)開就是我們配置的logo,完美處理白屏問(wèn)題。
注意:
如果項(xiàng)目使用了UI適配的三方庫(kù),例如androidAutoSize,一定記得根據(jù)文檔處理放棄啟動(dòng)頁(yè)適配,否則運(yùn)行出來(lái)的效果也是不如意。
總結(jié)
白屏處理其實(shí)就是通過(guò)主題配置一個(gè)背景,在加載頁(yè)面時(shí)會(huì)首先顯示該背景,無(wú)需渲染頁(yè)面,所以App打開就能很快展示Logo,一般延遲一兩秒再跳轉(zhuǎn)首頁(yè)達(dá)到一個(gè)良好的用戶體驗(yàn)。
以上就是Android應(yīng)用啟動(dòng)白屏處理方案詳解的詳細(xì)內(nèi)容,更多關(guān)于Android啟動(dòng)白屏處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解Android廣播Broadcast的啟動(dòng)流程
- Android?Service啟動(dòng)綁定流程詳解
- Android framework ATMS啟動(dòng)流程
- Android基準(zhǔn)配置文件Baseline?Profile方案提升啟動(dòng)速度
- Android開發(fā)InputManagerService創(chuàng)建與啟動(dòng)流程
- Android10 App啟動(dòng)Activity源碼分析
- Android10 App 啟動(dòng)分析進(jìn)程創(chuàng)建源碼解析
- Android?應(yīng)用程序的啟動(dòng)流程示例詳解
相關(guān)文章
Flutter 用自定義轉(zhuǎn)場(chǎng)動(dòng)畫實(shí)現(xiàn)頁(yè)面切換
本篇介紹了 fluro 導(dǎo)航到其他頁(yè)面的自定義轉(zhuǎn)場(chǎng)動(dòng)畫實(shí)現(xiàn),F(xiàn)lutter本身提供了不少預(yù)定義的轉(zhuǎn)場(chǎng)動(dòng)畫,可以通過(guò) transitionBuilder 參數(shù)設(shè)計(jì)多種多樣的轉(zhuǎn)場(chǎng)動(dòng)畫,也可以通過(guò)自定義的 AnimatedWidget實(shí)現(xiàn)個(gè)性化的轉(zhuǎn)場(chǎng)動(dòng)畫效果。2021-06-06Android 判斷屏幕開關(guān)狀態(tài)方式總結(jié)
這篇文章主要介紹了Android 判斷屏幕開關(guān)狀態(tài)方式總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-10-10Android實(shí)現(xiàn)手勢(shì)滑動(dòng)多點(diǎn)觸摸縮放平移圖片效果
這篇文章主要介紹了Android實(shí)現(xiàn)手勢(shì)滑動(dòng)多點(diǎn)觸摸縮放平移圖片效果,實(shí)現(xiàn)圖片支持多點(diǎn)觸控,自由的進(jìn)行縮放、平移的注意事項(xiàng),感興趣的小伙伴們可以參考一下2016-02-02Android studio保存logcat日志到本地的操作
這篇文章主要介紹了Android studio保存logcat日志到本地的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Android 5.0+ 屏幕錄制實(shí)現(xiàn)的示例代碼
這篇文章主要介紹了Android 5.0+ 屏幕錄制實(shí)現(xiàn)的示例代碼,從 5.0 開始,系統(tǒng)提供給了 app 錄制屏幕的一系列方法,不需要 root 權(quán)限,只需要用戶授權(quán)即可錄屏,相對(duì)來(lái)說(shuō)較為簡(jiǎn)單,感興趣的小伙伴們可以參考一下2018-05-05