スプラッシュ画面の実装を Android 12 以降に移行する

Android 11 以前でカスタム スプラッシュ画面を実装する場合は、 SplashScreen API に追加して、 Android 12 以降で正しく表示されることを確認します。

Android 12 以降では、Android システムのデフォルトのスプラッシュが適用されます。 画面がオン コールドウォーム がすべてのアプリで開始されます。システムのスプラッシュ画面は、デフォルトでは、アプリのランチャー アイコン要素とテーマの windowBackground(単色の場合)を使用して作成されます。

アプリを移行しない場合、Android 12 以降でのアプリ起動において、エクスペリエンスの低下や予期しないエクスペリエンスが生じる可能性があります。

  • 既存のスプラッシュ画面が android:windowBackground をオーバーライドするカスタムテーマ カスタム スプラッシュ画面がデフォルトの Android システムに置き換えられます スプラッシュ画面(Android 12 以降)これはアプリが想定するものではない可能性があります 体験できます

  • 専用の Activity を使用して既存のスプラッシュ画面を実装している場合は、 Android 12 以降を搭載したデバイスでアプリを起動すると、 重複するスプラッシュ画面: システムのスプラッシュ画面 その後、既存のスプラッシュ画面のアクティビティが続きます。

こうしたエクスペリエンスの低下や意図しないエクスペリエンスを防ぐには、 移行プロセスを完了する必要があります。移行後、API は 起動時間を短縮できます。また、スプラッシュ画面の操作を完全に制御できます。 プラットフォーム上の他のアプリとの整合性の高い起動エクスペリエンスが実現されます。

SplashScreen 互換性ライブラリ

SplashScreen API を直接使用することもできますが、代わりに AndroidX SplashScreen 互換性ライブラリを使用することを強くおすすめします。互換性ライブラリは SplashScreen API を使用し、下位互換性を確保して、すべての Android バージョンで一貫性のあるスプラッシュ画面を表示できるようにします。このドキュメントは互換言語を使用して作成されています。 ライブラリです。

SplashScreen API を直接使用して移行した場合、Android 11 以前ではスプラッシュ画面は移行前とまったく同じように表示されます。開始日 Android 12 では、スプラッシュ画面には Android 12 のデザインが導入されています。

SplashScreen 互換ライブラリを使用して移行すると、 すべてのバージョンの Android で同じスプラッシュ画面を使用します。

スプラッシュ画面の実装を移行する

既存のスプラッシュ画面の実装を Android 12 以降に移行するには、次の手順を行います。

この手順は、移行元の実装のタイプにかかわらず適用できます。専用の Activity を移行する場合は、このドキュメントで説明する、カスタマイズしたスプラッシュ画面 Activity を適応させるためのベスト プラクティスに従ってください。SplashScreen API を使用すると、専用のスプラッシュ画面アクティビティに起因する起動のレイテンシを短縮することもできます。

スプラッシュ画面を移行する手順は次のとおりです。

  1. build.gradle ファイルで、compileSdkVersion を変更し、依存関係に SplashScreen 互換性ライブラリを含めます。

    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. super.onCreate() を呼び出す前に、開始アクティビティで installSplashScreen を呼び出します。

    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 を主に転送に使用している場合は、それを削除する方法を検討してください。たとえば、実際のアクティビティに直接リンクする、サブコンポーネントを持つ 1 つのアクティビティに移動する、などの方法が考えられます。そうでない場合 場合は、 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() はできる限り軽量化します。

    App Startup ライブラリを使用して、アプリ起動時にコンポーネントを初期化することによってもメリットが得られます。その際は、常にすべての Pod の読み込みを 必要とせず、起動時のアクティビティでジャンクが発生しないように 遅延読み込みされたモジュールが利用可能になります。

  • 少量のデータをローカルに読み込む間にプレースホルダを作成する。こちらの 推奨されるテーマ設定アプローチを使用して、アプリが 確認します。下位互換性のあるスプラッシュ画面を実装するには、 手順は スプラッシュ画面を長時間画面に表示する

  • プレースホルダを表示する。継続時間が不確定なネットワークベースの読み込みでは スプラッシュ画面を閉じて、非同期読み込みのプレースホルダを表示する。 読み込み状態を反映するコンテンツ領域に、軽いアニメーションを適用することを検討してください。読み込まれたコンテンツ構造が、 スケルトン構造 コンテンツを読み込んだときにスムーズに移行できるようにします。

  • キャッシュを使用する。ユーザーが初めてアプリを開いたときに、 一部の UI 要素の読み込みインジケーターを確認できます(次の図を参照)。「 次回にユーザーがアプリに戻ったとき、キャッシュに保存されたコンテンツを 新しいコンテンツを読み込みます。

図 1. UI プレースホルダを表示しています。