將啟動畫面實作遷移至 Android 12 以上版本

如果您在 Android 11 以下版本中實作自訂啟動畫面,請遷移 將應用程式轉移至 SplashScreen API 請確保應用程式可在 Android 12 以上版本中正確顯示。

從 Android 12 開始,系統會套用 Android 系統預設啟動畫面 將螢幕開啟 暖 啟動所有應用程式。根據預設 這個系統啟動畫面是利用應用程式的啟動器圖示元素所建立 和您的 windowBackground 如果是單一顏色,則建議採用這種方式。

如果您尚未遷移應用程式,啟動 Android 12 和 Android 系統的應用程式啟動體驗 ,則可能會降低工作階段品質或產生意料之外的結果。

  • 如果您已經使用 覆寫 android:windowBackground 的自訂主題 系統會以預設的 Android 系統取代您的自訂啟動畫面 Android 12 以上版本中的啟動畫面。這可能不是您應用程式的預期用途 無須專人管理

  • 如果您是使用專屬 Activity 實作現有啟動畫面, 在搭載 Android 12 以上版本的裝置上啟動應用程式,結果 重複的啟動畫面: 系統啟動畫面 螢幕,後面接著您現有的啟動畫面活動。

如果不想受到降級或非預期的體驗,請完成 遷移程序。遷移完成後 縮短啟動時間,讓您完全掌控啟動畫面體驗。 並與平台上的其他應用程式建立更一致的啟動體驗。

SplashScreen Compat 程式庫

您可以直接使用 SplashScreen API,但我們強烈建議使用 Androidx SplashScreen Compat 程式庫 。Compat 程式庫使用 SplashScreen API 回溯相容,並為啟動畫面打造一致的外觀和風格 會顯示在所有 Android 版本中本文件使用 Compat 檔案 資源庫。

如果是直接在 Android 11 以下版本使用 SplashScreen API 進行遷移 啟動畫面的外觀與遷移前完全相同。開始日期 Android 12 的啟動畫面採用 Android 12 的外觀和風格。

如果您使用 SplashScreen Compat 程式庫進行遷移,系統會顯示 相同的啟動畫面。

遷移啟動畫面實作

如要遷移現有啟動畫面,請完成下列步驟 Android 12 以上版本。

這個程序適用於您要遷移的實作類型 如果要從專屬 Activity 遷移,請遵循 相關做法 自訂啟動畫面 ActivitySplashScreen API 也會減少啟動時間 隨著專用啟動畫面活動所導致的延遲時間。

如要遷移啟動畫面,請按照下列步驟操作:

  1. build.gradle 檔案中, 請變更compileSdkVersion內容,然後在當中加入 依附元件中的 SplashScreen Compat 程式庫

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. 建立父項為 Theme.SplashScreen 的主題。將 postSplashScreenTheme 設為 Activity 必須使用的主題,而 將 windowSplashScreenAnimatedIcon 的值轉換為可繪項目或動畫 可繪項目。其他屬性為選用屬性。

    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
       <!-- Set the splash screen background, animated icon, and animation
       duration. -->
       <item name="windowSplashScreenBackground">@color/...</item>
    
       <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated
            drawable. 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 splash
       screen. This is required. -->
       <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
    

    如要在圖示下方新增背景顏色,可以使用 Theme.SplashScreen.IconBackground 主題並設定 windowSplashScreenIconBackground 屬性。

  3. 在資訊清單中,將起始活動的主題替換成您產生的主題 建立容器

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. 請先在起始活動中呼叫 installSplashScreen,再撥打電話 super.onCreate()

    Kotlin

    class MainActivity : Activity() {
    
       override fun onCreate(savedInstanceState: Bundle?) {
           // Handle the splash screen transition.
           val splashScreen = installSplashScreen()
    
           super.onCreate(savedInstanceState)
           setContentView(R.layout.main_activity)
    ...
    

    Java

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
             // Handle the splash screen transition.
             SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
    
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main_activity);
        }
    }
    

installSplashScreen 會傳回啟動畫面物件,您可以視需要選擇是否傳回啟動畫面物件 可自訂動畫,或延長啟動畫面在螢幕上停留的時間 時間。如要進一步瞭解如何自訂動畫,請參閱 延長啟動畫面在螢幕上的停留時間自訂用於關閉啟動畫面的動畫

將自訂啟動畫面活動調整至啟動畫面

遷移至 Android 12 以上版本的啟動畫面後,請決定 與上一個自訂啟動畫面 Activity 搭配使用。您擁有下列項目 選項:

  • 保留自訂活動,但阻止其顯示。
  • 基於品牌宣傳考量保留自訂活動。
  • 移除自訂活動,並視需要調整應用程式。

禁止顯示自訂活動

如果上一個啟動畫面 Activity 主要用於轉送, 設法移除資訊舉例來說,您可以直接連結至 以及移至含有子元件的單一活動。如果沒有 可行的 SplashScreen.setKeepOnScreenCondition敬上 來保留轉送活動,但停止顯示。建議做法 將啟動畫面轉移至下一個活動,並支援流暢運作 轉換。

Kotlin

  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()
     }
   ...
  

Java

  public class RoutingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      SplashScreen splashScreen = SplashScreen.installSplashScreen(this);

       super.onCreate(savedInstanceState);

       // Keep the splash screen visible for this Activity.
       splashScreen.setKeepOnScreenCondition(() -> true );
       startSomeNextActivity();
       finish();
    }
  ...
  

保留自訂活動用於品牌宣傳

如果想基於品牌宣傳考量使用先前的啟動畫面 Activity,請 可以從系統啟動畫面轉換至您的自訂啟動畫面 Activity自訂用於關閉開頭的動畫 不過,請盡量避免發生這種情況,並使用 SplashScreen 運用 API 為啟動畫面建立品牌。

如果您需要顯示對話方塊, 建議您在後續的自訂啟動畫面活動上方顯示它,或是 。

移除自訂啟動畫面活動

一般來說,我們建議移除先前的自訂啟動畫面 Activity 以免啟動畫面重複出現、提高效率 並縮短啟動畫面的載入時間不同的技術 ,可避免顯示重複的啟動畫面活動。

  • 為元件、模組或程式庫使用延遲載入功能。避免載入 或是初始化應用程式不需用到的元件或程式庫 執行的工作稍後再於應用程式需要時載入。

    如果應用程式確實需要特定元件才能正常運作,請只在 不需要在啟動時使用,或是使用背景執行緒進行載入 應用程式啟動後請嘗試將 Application.onCreate() 保持切換為僅

    您也可以使用 應用程式啟動程式庫:用於初始化元件 應用程式啟動時。這樣做時,請務必 啟動活動所需的模組,也不要在 延遲載入的模組可以使用。

  • 在本機載入少量資料時建立預留位置。使用 建議的主題設定方法,並等到應用程式 準備好如要實作具回溯相容性的啟動畫面,請按照 中列出的步驟 延長啟動畫面在螢幕上的停留時間

  • 顯示預留位置。對於持續時間不確定的網路型載入作業, 關閉啟動畫面並顯示用於非同步載入的預留位置。 考慮在內容區域套用巧妙的動畫 載入狀態。請確定載入的內容結構與 骨架結構 盡可能在內容載入時順利轉換。

  • 使用快取。使用者首次開啟應用程式時,您可以顯示 部分 UI 元素的載入指標,如下圖所示。 使用者下次返回應用程式時,您可以 您會載入較近期的內容

,瞭解如何調查及移除這項存取權。
圖 1.顯示 UI 預留位置。