アプリの最適化に関するベスト プラクティス

以下では、品質を損なうことなくアプリを最適化するためのベスト プラクティスを紹介します。

ベースライン プロファイルを使用する

ベースライン プロファイルにより、コードの実行速度が初回起動から 30% 短縮され、すべてのユーザー操作(アプリの起動、画面間の移動、コンテンツのスクロールなど)が初回実行よりも滑らかになります。アプリの速度と応答性を高めると、1 日あたりのアクティブ ユーザー数が増加し、平均リピーター率が高まります。

起動プロファイルを使用する

起動プロファイルはベースライン プロファイルに似ていますが、DEX レイアウトを最適化してアプリの起動を高速化するために、コンパイル時に実行されます。

App Startup ライブラリを使用する

App Startup ライブラリを使用すると、初期化の必要があるコンポーネントごとに個別のコンテンツ プロバイダを定義する代わりに、単一のコンテンツ プロバイダを共有するコンポーネント初期化子を定義できます。これにより、アプリの起動時間が大幅に短縮されます。

ライブラリを遅延読み込みする、または自動初期化を無効にする

アプリでは多数のライブラリを使用します。起動に不可欠なライブラリがある一方で、大半のライブラリは、最初のフレームが描画されるまで初期化を遅延しても構わない場合があります。一部のライブラリは、起動時の自動初期化を無効にするオプションや、オンデマンド初期化を備えています。こうしたオプションを使用すると、必要になるまで初期化を延期してパフォーマンスを向上させることができます。たとえば、オンデマンド初期化を使用し、必要なときにのみ WorkManager を呼び出すことができます。

コンポーザブルで状態を使用する

状態とは、時間とともに変化する可能性があり、UI に表示される内容や UI の動作を決定するデータのことです。Compose は宣言型であるため、UI が状態の変化を明示的に監視して応答しない限り、画面は自動的に更新されません。

条件付きコンポジションを使用して、起動時にすぐに表示されない UI の部分(エラー画面、オプションの詳細、セカンダリ タブなど)の読み込みを遅延させることを検討してください。重いコンポーネントを簡単な状態チェックでラップすることで、重要な起動ウィンドウでコンポジション ロジックが実行されるのを防ぎ、初期レイアウトを軽量に保つことができます。

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

shouldLoad を変更して、条件ブロック内のコンポーザブルを読み込みます。

LaunchedEffect(Unit) {
   shouldLoad = true
}

これにより、最初のスニペットの条件ブロック内にあるコードを含む再コンポーズがトリガーされます。詳しくは、コンポーザブルの State をご覧ください。

スプラッシュ画面を最適化する

スプラッシュ画面はアプリ起動の大部分を占めます。適切に設計されたスプラッシュ画面を使用すれば、アプリ起動のエクスペリエンスを全体的に改善できます。Android 12(API レベル 31)以降には、パフォーマンスを向上させるために設計されたスプラッシュ画面があります。詳しくは、スプラッシュ画面をご覧ください。

スケーラブルな画像を使用する

画像にはベクター グラフィックを使用することをおすすめします。それが不可能な場合は、WebP 画像を使用します。WebP は、ウェブ上の画像に対する高品質な可逆圧縮と非可逆圧縮が可能な画像形式です。既存の BMP、JPG、PNG、静的 GIF 画像は、Android Studio を使用して WebP 形式に変換できます。詳しくは、WebP 画像を作成するをご覧ください。

起動時に読み込む画像の数とサイズを最小限にするのも重要です。

Performance API を使用する

メディア再生用のパフォーマンス API は、Android 12(API レベル 31)以降で使用できます。この API を利用することで、デバイスの能力を把握して、それに応じたオペレーションを実行できるようになります。

コールド スタートアップのトレースを優先する

コールド スタートとは、アプリをゼロから、つまり、システムのプロセスがそのアプリのプロセスをまだ作成していない状態で起動することです。デバイスが起動してから初めてアプリを起動する場合や、システムがアプリを強制停止した場合、通常、アプリはコールド スタートします。コールド スタートは非常に低速です。これは、他の起動タイプ(ウォーム スタートやホットスタートなど)では不要な処理がアプリとシステムで多数実行されるためです。コールド スタートアップのシステム トレースを行うことで、アプリのパフォーマンスをより正確に監視できます。