スプラッシュ画面の実装を 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 バージョンで一貫性のあるスプラッシュ画面を表示できるようにします。このドキュメントは互換言語を使用して作成されています。 ライブラリです。

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

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

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

既存のスプラッシュ画面を移行するには、次の操作を行います 実装する必要があります。

この手順は、移行元の実装のタイプにかかわらず適用できます。専用の Activity から移行する場合は、ベスト プラクティスの ベスト プラクティスを実践するために、 カスタマイズされたスプラッシュ画面 ActivitySplashScreen 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 が主にルーティングに使用されていた場合、 方法を検討する必要があります。たとえば、 サブコンポーネントのある単一のアクティビティに移動することもできます。そうでない場合 場合は、 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 要素の読み込みインジケーターを確認できます(次の図を参照)。「 ユーザーが次にアプリに戻ったとき、キャッシュに保存されたコンテンツを 新しいコンテンツを読み込みます。

で確認できます。 <ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">をご覧ください。 <ph type="x-smartling-placeholder">
</ph> 図 1.UI プレースホルダを表示しています。