💬

Androidアプリの起動について

2023/01/30に公開

アプリの起動について調べたことをまとめます。

アプリの起動の3つの状態

アプリの起動には、コールドスタート・ウォームスタート・ホットスタートの3つの状態があり、これら3つの状態のいずれかで起動が行われます。

コールドスタート

アプリをゼロからスタートさせることです。
以下のような場合にコールドスタートが発生します。

  • デバイスの起動後に初めてアプリを起動する場合
  • システムがアプリを強制終了した後で起動する場合

コールドスタートは最も時間がかかるため、アプリの起動時間を最小限に抑えるために、最も重視されます。

Androidでのコールドスタートでパフォーマンスの問題が発生しがちなのが、アプリの作成時とActivityの作成時になります。
主な原因として、ActivityのonCreateメソッドで行われるActivityの実行に必要なオブジェクトの初期化処理があげられます。

ウォームスタート

ウォームとは、コールドスタートとホットスタートの中間のような起動のことで、コールドスタートで行われる操作の一部がまだ行われている状態を指します。
このため、コールドスタートよりは高速ですが、ホットスタートよりはオーバーヘッドが大きくなります。
ウォームスタートが発生する条件は以下のような状況になります。

  • 一度アプリを終了したが、その後すぐに起動し直した場合
  • システムがメモリからアプリを削除し、その後アプリが再起動された場合

ホットスタート

ホットスタートは、コールドスタートよりオーバーヘッドが小さいプロセスになります。
ホットスタートは、アプリのプロセスがすでにバックグラウンドで実行されている場合を指します。
なので、アプリのすべてのActivityがメモリに存在している状況であれば、初期化の処理を繰り返し行う必要がなくなるので、かなり高速になります。

TTIDとTTFD

TTID (Time To Initial Display)

AndroidのTTIDとは、アプリの初期表示までの時間を示していて、アプリが最初のフレームを生成するまでにかかる時間になります。
TTIDには、コールドスタートの場合にはプロセスの初期化、ウォームスタートの場合にはActivityの作成、最初のフレームの表示が含まれています。
TTIDは、logcatでDisplayed値を含む出力行に表示されます。

TTFD (Time To Full Display)

TTFDはアプリの完全表示までの時間を示しています。
アプリが完全なコンテンツで最初のフレームを生成するためにかかる時間を測定します。
TTFDは、reportFullyDrawnメソッドを使用することで取得することができます。

まとめ

アプリの起動状態や起動時間についてまとめました。
実際にTTIDやTTFDを計測して、そうすればアプリの起動速度改善ができるのかについて次から調べていこうと思います。

参考

https://developer.android.com/topic/performance/vitals/launch-time?hl=ja

Discussion