日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android應用啟動白屏處理方案詳解_Android

作者:似曾相識2022 ? 更新時間: 2023-06-21 編程語言

正文

相信大家一定遇到過某些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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新