2022-12-15 :-(
_ Androidアプリケーションの起動時間に関する一考察
Android 4.x の時代なのでもはや設計が異なってそうだけど。
Zygote というプロセスがあらかじめ起動していて、そいつは Java のクラスをいくつかロードしている。 Android のアプリが新規に起動するとき Zygote プロセスから fork するのでアプリ自体がロードする Java クラスはある程度少なくて済む。よってロードにかかる時間は短縮される。アプリプロセスは CoW でコピーされるので実際にクラスに書き込まれるまではアプリは Java クラスをロードしない。つまりアプリが未使用のクラスを Zygote がロードしていても、アプリがそのクラスを使わないならばクラスはロードされない。
アプリが新規に起動するのではなくバックグラウンドからフォアグラウンドに遷移するときは、すでにアプリはロードされているので上記のような処理は省かれる。つまり速い。
追記: この辺りの処理は変更されてないようです。
起動時間の管理 | Android オープンソース プロジェクト | Android Open Source Project
起動プロセスは、ブート ROM から始まり、ブートローダー、カーネル、init、Zygote、システム サーバーが続く一連のアクションです