Android應(yīng)用啟動白屏處理方案詳解
正文
相信大家一定遇到過某些App在手機桌面打開時會出現(xiàn)短暫或者幾秒鐘的白屏情況吧,沒錯那是應(yīng)用程序啟動后系統(tǒng)默認的背景色,此時應(yīng)用的第一個Activity還未被加載出來,所以不管怎么設(shè)置第一個Activity的背景色都毫無作用。但細心的朋友發(fā)現(xiàn),有些App啟動時白屏的時間又很短幾乎可以忽略不計呢?今天就分享一篇關(guān)于App冷啟動處理白屏?xí)r間過長的問題。
首先先聊一聊冷啟動和熱啟動:
- 冷啟動
殺掉App,此時的App進程不存在于后臺,啟動時從Logo頁面開始。
- 熱啟動
App處于后臺,進程未被殺死,重新進入前臺時頁面保持上一次頁面,不會重新啟動。
所以,我們此次所講的屬于冷啟動過程,當應(yīng)用程序代碼量小、業(yè)務(wù)邏輯少、體積小時,App啟動還是比較快,白屏?xí)r間可以忽略不計。一旦初始化工具過多,首頁業(yè)務(wù)邏輯過多時啟動速度會嚴重變慢,此時的白屏?xí)r間會越來越長,給人一種極差的體驗。我們需要做的就是在白屏?xí)r間盡可能快速的展示Logo等圖標,讓它成為一個過渡,待應(yīng)用程序準備好后跳轉(zhuǎn)到相應(yīng)頁面以提高用戶體驗。
配置一個SplashActivity
首先,需要配置一個SplashActivity(應(yīng)用展示的第一個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是我們本次重點配置,windowAnimationStyle是取消頁面的一些動畫效果,一般首頁我們讓它無動畫,其他設(shè)置根據(jù)自己情況設(shè)置即可。
讓我們來看看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>
白色背景上疊加一個bitmap,這里需要注意的是bitmap外層的item標簽一定要根據(jù)設(shè)計稿配置好上下邊距,否則運行App后的效果會被鋪滿屏幕。
然后我們將上面的主題配置到activity中,此時SplashActivity的布局文件中可以什么都不寫,因為該主題就相當于背景,如果此處編寫頁面可能會和背景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>
至此,再次運行打開App發(fā)現(xiàn),幾乎點開就是我們配置的logo,完美處理白屏問題。
注意:
如果項目使用了UI適配的三方庫,例如androidAutoSize,一定記得根據(jù)文檔處理放棄啟動頁適配,否則運行出來的效果也是不如意。
總結(jié)
白屏處理其實就是通過主題配置一個背景,在加載頁面時會首先顯示該背景,無需渲染頁面,所以App打開就能很快展示Logo,一般延遲一兩秒再跳轉(zhuǎn)首頁達到一個良好的用戶體驗。
以上就是Android應(yīng)用啟動白屏處理方案詳解的詳細內(nèi)容,更多關(guān)于Android啟動白屏處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解flutter中常用的container layout實例
這篇文章主要為大家介紹了詳解flutter中常用的container layout實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
android開發(fā)教程之使用looper處理消息隊列
這篇文章主要介紹了通過HandlerThread對象來實現(xiàn)使用looper處理消息隊列的功能,大家參考使用吧2014-01-01
Android RecycleView 實現(xiàn)左滑上下分層示例代碼(自定義功能)
這篇文章主要介紹了Android RecycleView 實現(xiàn)左滑上下分層示例代碼(自定義功能),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Android中LeakCanary檢測內(nèi)存泄漏的方法
本篇文章主要介紹了Android中LeakCanary檢測內(nèi)存泄漏的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
Android自定義ScrollView使用自定義監(jiān)聽
這篇文章主要介紹了Android自定義ScrollView使用自定義監(jiān)聽 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Android Studio生成 Flutter 模板代碼技巧詳解
這篇文章主要為大家介紹了Android Studio生成 Flutter 模板代碼技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10

