如果在 Android 11 或更低版本中實現自定義啟動畫面,請遷移應用遷移到?SplashScreen?API 以獲取幫助 確保其在 Android 12 及更高版本中正確顯示。
從 Android 12 開始,在所有應用的冷啟動和溫啟動期間,系統都會應用?Android 系統的默認啟動畫面。默認情況下 該系統啟動畫面是使用應用的啟動器圖標元素構建的 以及windowBackground?主題(如果它是單色)。
如果不遷移應用,則 Android 12 和 Android 12 上的應用啟動體驗會受到影響 可能會降級,或出現意外結果。
-
如果現有的啟動畫面是使用?替換?android:windowBackground?的自定義主題, 系統會將自定義啟動畫面替換為默認的 Android 系統 Android 12 及更高版本上的啟動畫面。這可能不是應用的預期 體驗。
-
如果現有啟動畫面是使用專用?
Activity
?實現的,那么在搭載 Android 12 或更高版本的設備上啟動應用會導致系統重復顯示啟動畫面,也就是先顯示系統啟動畫面,接著顯示現有的啟動畫面 activity。
如要避免這類降級或意外體驗,可以完成 遷移過程。遷移完成后,該 API 縮短啟動時間,讓完全掌控啟動畫面體驗, 還能打造與平臺上其他應用更加一致的啟動體驗。
SplashScreen compat 庫
可以直接使用?SplashScreen
?API,但我們強烈建議改用?Androidx?SplashScreen?compat 庫。該 compat 庫使用?SplashScreen
?API,能夠向后兼容,并可在所有 Android 版本上顯示外觀和風格一致的啟動畫面。本文檔便是基于 compat 庫編寫的。
如果直接使用?SplashScreen
?API 進行遷移,在 Android 11 及更低版本上,啟動畫面看起來與遷移前完全一樣。開始日期 Android 12 時,啟動畫面具有 Android 12 的外觀和風格。
如果使用?SplashScreen
?compat 庫進行遷移,則系統會顯示 在所有 Android 版本上都應用相同的啟動畫面。
遷移啟動畫面實現
只需完成以下步驟,便可將現有的啟動畫面實現遷移到 Android 12 及更高版本。
此過程適用于要從中遷移的任何類型的實現。如果要從專用?Activity
?遷移,請按照本文所述的最佳實踐來調整自定義啟動畫面?Activity
。SplashScreen
?API 還可減少啟動 延遲。
如需遷移啟動畫面,請執行以下操作:
-
在?
build.gradle
?文件中,更改 compileSdkVersion,并在依賴項中添加?SplashScreen
?compat 庫。build.gradleandroid {compileSdkVersion 31... } dependencies {...implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
-
創建一個父主題為?
Theme.SplashScreen
?的主題。將?postSplashScreenTheme
?的值設置為?Activity
?必須使用的主題,并將?windowSplashScreenAnimatedIcon
?的值設置為可繪制對象或帶動畫的可繪制對象。其他屬性可視需要進行設置。<style name="Theme.App.Starting" parent="Theme.SplashScreen"><!-- Set the splash screen background, animated icon, and animationduration. --><item name="windowSplashScreenBackground">@color/...</item><!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animateddrawable. One of these is required. --><item name="windowSplashScreenAnimatedIcon">@drawable/...</item><!-- Required for animated icons. --><item name="windowSplashScreenAnimationDuration">200</item><!-- Set the theme of the Activity that directly follows your splashscreen. This is required. --><item name="postSplashScreenTheme">@style/Theme.App</item> </style>
如果要在圖標下添加背景顏色,可以使用?
Theme.SplashScreen.IconBackground
?主題及設置?windowSplashScreenIconBackground
?屬性。 -
在清單中,將啟動 activity 的主題替換為所需的主題。 創建 Deployment
<manifest><application android:theme="@style/Theme.App.Starting"><!-- or --><activity android:theme="@style/Theme.App.Starting"> ...
-
在啟動 activity 中,先調用?
installSplashScreen
,然后再調用?super.onCreate()
。class MainActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {// Handle the splash screen transition.val splashScreen = installSplashScreen()super.onCreate(savedInstanceState)setContentView(R.layout.main_activity) ...
installSplashScreen
?會返回啟動畫面對象,可以根據需要使用該對象自定義動畫,或讓啟動畫面在屏幕上顯示更長時間。如需詳細了解如何自定義動畫,請參閱讓啟動畫面在屏幕上顯示更長時間和自定義用于關閉啟動畫面的動畫。
根據啟動畫面調整自定義啟動畫面 activity
遷移到適用于 Android 12 及更高版本的啟動畫面后,請決定如何處理之前的自定義啟動畫面?Activity
。可以選擇以下任一方式:
- 保留自定義 activity,但不讓它顯示。
- 出于品牌推廣原因保留自定義 activity。
- 移除自定義 activity,然后根據需要來調整應用。
禁止顯示自定義 activity
如果舊啟動畫面?Activity
?主要用于路由,請考慮移除它的方法。例如,可以直接鏈接到 activity 或移至具有子組件的單個 activity。如果 可行,可以使用?SplashScreen.setKeepOnScreenCondition?將路由 activity 保留到位,但使其停止渲染。執行此操作 將啟動畫面傳輸到下一個 activity,并支持流暢 過渡效果。
class RoutingActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {val splashScreen = installSplashScreen()super.onCreate(savedInstanceState)// Keep the splash screen visible for this Activity.splashScreen.setKeepOnScreenCondition { true }startSomeNextActivity()finish()}...
出于品牌推廣原因保留自定義 activity
如果想出于品牌推廣原因使用之前的啟動畫面?Activity
,則可以通過自定義用于關閉啟動畫面的動畫,從系統啟動畫面轉換到自定義啟動畫面?Activity
。不過,最好盡可能避免這種情況,并使用?SplashScreen
?通過 API 為啟動畫面添加品牌信息。
如果需要顯示對話框,我們建議在后續的自定義啟動畫面 activity 上方或在系統啟動畫面后的主 activity 上方顯示對話框。
移除自定義啟動畫面 activity
通常,我們建議移除之前的自定義啟動畫面?Activity
?這樣既能避免重復的啟動畫面,又能提高效率 并縮短啟動畫面加載時間。可以使用以下不同的方法來避免顯示多余的啟動畫面 activity。
-
對組件、模塊或庫使用延遲加載。避免加載或初始化應用在啟動時不需要的組件或庫。在應用需要時再加載它們。
如果應用確實需要某個組件才能正常運行,那么請僅在真正需要的時候才加載,而不要在啟動時加載,或者在應用啟動后使用后臺線程進行加載。請盡量讓?
Application.onCreate()
?輕裝上陣。還可以使用?App Startup 庫,用于初始化組件 。執行此操作時,請確保仍然加載所有 啟動 activity 所需的模塊,并且不會在 延遲加載的模塊可供使用
-
在本地加載少量數據時創建占位符。使用推薦的主題方法,并在應用準備就緒之前暫不顯示。如需實現向后兼容的啟動畫面,請遵循 概述的?讓啟動畫面在屏幕上顯示更長時間。
-
顯示占位符。對于持續時間不確定的基于網絡的負載: 關閉啟動畫面并顯示異步加載的占位符。 考慮在內容區域應用巧妙的動畫效果來反映加載狀態。務必讓所加載內容的結構與框架結構盡可能保持一致,以便在內容加載后順利過渡。
-
使用緩存。當用戶首次打開應用時,可以顯示某些界面元素的加載指示標志,如下圖所示。通過 當用戶下次返回應用時,可以在 加載更新的內容。