網站首頁 編程語言 正文
正文
相信大家一定遇到過某些App在手機桌面打開時會出現短暫或者幾秒鐘的白屏情況吧,沒錯那是應用程序啟動后系統默認的背景色,此時應用的第一個Activity還未被加載出來,所以不管怎么設置第一個Activity的背景色都毫無作用。但細心的朋友發現,有些App啟動時白屏的時間又很短幾乎可以忽略不計呢?今天就分享一篇關于App冷啟動處理白屏時間過長的問題。
首先先聊一聊冷啟動和熱啟動:
- 冷啟動
殺掉App,此時的App進程不存在于后臺,啟動時從Logo頁面開始。
- 熱啟動
App處于后臺,進程未被殺死,重新進入前臺時頁面保持上一次頁面,不會重新啟動。
所以,我們此次所講的屬于冷啟動過程,當應用程序代碼量小、業務邏輯少、體積小時,App啟動還是比較快,白屏時間可以忽略不計。一旦初始化工具過多,首頁業務邏輯過多時啟動速度會嚴重變慢,此時的白屏時間會越來越長,給人一種極差的體驗。我們需要做的就是在白屏時間盡可能快速的展示Logo等圖標,讓它成為一個過渡,待應用程序準備好后跳轉到相應頁面以提高用戶體驗。
配置一個SplashActivity
首先,需要配置一個SplashActivity(應用展示的第一個Activity)的主題
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 將splash圖片設置在這,這樣這張圖片取代白屏 --> <item name="android:windowBackground">@drawable/logo_drawable</item> <item name="android:windowAnimationStyle">@style/notAnimation</item> <!--將頂部狀態欄設置為透明,并將界面內容布局上邊界上提至狀態欄頂部--> <item name="android:windowTranslucentStatus">true</item> <!--如果有底部虛擬導航欄,則將底部虛擬導航欄設置為透明,并將界面內容布局下邊界下沉至虛擬導航欄底部--> <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是取消頁面的一些動畫效果,一般首頁我們讓它無動畫,其他設置根據自己情況設置即可。
讓我們來看看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標簽一定要根據設計稿配置好上下邊距,否則運行App后的效果會被鋪滿屏幕。
然后我們將上面的主題配置到activity中,此時SplashActivity的布局文件中可以什么都不寫,因為該主題就相當于背景,如果此處編寫頁面可能會和背景logo重合,僅需要編寫一些邏輯和跳轉處理。
<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發現,幾乎點開就是我們配置的logo,完美處理白屏問題。
注意:
如果項目使用了UI適配的三方庫,例如androidAutoSize,一定記得根據文檔處理放棄啟動頁適配,否則運行出來的效果也是不如意。
總結
白屏處理其實就是通過主題配置一個背景,在加載頁面時會首先顯示該背景,無需渲染頁面,所以App打開就能很快展示Logo,一般延遲一兩秒再跳轉首頁達到一個良好的用戶體驗。
原文鏈接:https://juejin.cn/post/7203730887787053111
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-11-08 Numpy安裝、升級與卸載的詳細圖文教程_python
- 2022-05-11 SpringBoot jackson返回值中含有null的解決辦法
- 2023-01-11 ubuntu20.04虛擬機無法上網的問題及解決_Linux
- 2022-05-01 Python?數據可視化神器Pyecharts繪制圖像練習_python
- 2022-10-17 安卓開發之FragmentPagerAdapter和FragmentStatePagerAdapte
- 2022-11-15 Golang?使用os?庫的?ReadFile()?讀文件最佳實踐_Golang
- 2022-08-03 GoFrame框架garray并發安全數組使用開箱體驗_Golang
- 2022-12-21 React?之最小堆min?heap圖文詳解_React
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支