起動レイテンシは、1 日のアクティブ ユーザー数を保持し、最初の操作からシームレスなユーザー エクスペリエンスを確保するための重要な指標です。これは、パフォーマンスとのトレードオフが考慮される可能性のある低 RAM 環境で特に当てはまります。ただし、アプリの起動を改善する前に、起動そのものに寄与する根本的な側面を理解することが重要です。
ベスト プラクティス
ベースライン プロファイルを一緒に配布する
ベースライン プロファイルで、含まれているコードパスの解釈とジャストインタイム(JIT)のコンパイル手順を回避することで、初回起動からコード実行速度が約 30% 向上します。アプリでベースライン プロファイルを配布することで、Android ランタイム(ART)は、事前(AOT)コンパイルによって含まれるコードパスを最適化し、すべての新規ユーザー、すべてのアプリ更新でパフォーマンスを向上できます。
積極的初期化を避ける
アプリの起動シーケンスで必要のない可能性のある積極的作業を回避します。アプリがプロセスを開始する可能性が最も高いシナリオは、アプリの起動によるものです。ただし、WorkManager、JobScheduler、BroadcastReceiver、バインドされたサービス、AndroidX スタートアップ ライブラリが、バックグラウンドでアプリプロセスを開始することもあります。可能であれば、Application
クラスで不必要に積極的に初期化することを回避します。多くのライブラリにはオンデマンドの初期化があるため、必要な場合にのみ呼び出すことができます。
UI スレッドからバックグラウンド スレッドへタスクを移動する
時間がかかり、メインスレッドをブロックしているタスクがある場合は、それらのタスクをバックグラウンド スレッドに移動するか、WorkManager を使用して効率を維持します。長い時間枠を占有するオペレーションや、想定以上に時間がかかるオペレーションを特定します。これらのタスクを最適化すると、起動のレイテンシを大幅に改善できます。
重大なディスク読み取りの競合を分析して修正する
StrictMode は、UI オペレーションが受信され、アニメーションが発生するアプリのメインスレッドでの誤ったディスクやネットワーク アクセスの使用を検出できるデベロッパー ツールです。ツールで改善の可能性がある領域を検出したら、アプリを自動的に終了するか、違反をログに記録して、後でさらに検査できます。
同期 IPC を避ける
Android のプロセス間通信(IPC)メカニズムであるバインダー呼び出しが原因で、アプリの実行が長時間一時停止することがよくあります。Android の最近のバージョンでは、これが UI スレッドの実行が停止する大きな原因になっています。バインダー呼び出しを行う関数の呼び出しを避けるのが一般的な対処です。避けられない場合は、値をキャッシュするか、作業をバックグラウンド スレッドに移動する必要があります。詳細については、スレッド スケジューリングの遅延をご覧ください。