1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Androidアプリが起動するまでの処理

Posted at

きっかけ

Androidプロジェクトのbuild.gradleファイルでエラーが起きた際、そもそもアプリがビルドされ、ユーザーの端末で起動するまでにどのような処理が動いているのか、その全体像が気になったことがこの記事をまとめたきっかけです。


アプリがユーザーの元に届き、起動するまで

Androidアプリの開発からユーザーによる起動までには、大きく分けて2つのフェーズが存在します。

  1. ビルドフェーズ: 開発者のPCで、ソースコードからインストールファイルを作成する段階。
  2. 起動フェーズ: ユーザーの端末で、アプリアイコンがタップされてから画面が表示されるまでの段階。

ここでは、それぞれのフェーズの処理の流れを記述しています。


【1. ビルドフェーズ】 アプリがビルドされる時の処理の流れ

開発者がAndroid Studioでアプリをビルドする際、Gradleというツールがbuild.gradlesettings.gradleといった設定ファイルを元に、インストールファイル(APK/AAB)を構築します。

Step 1: settings.gradle の評価

ビルドの初期化 フェーズです。

  • プロジェクトにどのモジュールが含まれているかを定義します。
  • Gradleはまずこのファイルを評価し、プロジェクトの全体構造を把握します。

Step 2: プロジェクトルートの build.gradle の評価

構成 フェーズです。

  • プロジェクト全体に共通する設定(リポジトリの場所やビルドツールのバージョンなど)を定義します。

Step 3: 各モジュールの build.gradle の評価

  • モジュールごとの詳細な設定(依存ライブラリ、SDKバージョン、アプリのバージョンなど)を定義します。

これらのプロセスを経て、アプリのインストールファイルが完成します。ユーザーの端末では、この完成品だけが使用されます。


【2. 起動フェーズ】 ユーザーがアプリを起動する時の処理の流れ

ユーザーがスマートフォンのホーム画面でアプリアイコンをタップした後の流れです。

Step 1: ユーザーがアイコンをタップ

  • ホーム画面アプリであるLauncherが、ユーザーのタップ操作を認識します。

Step 2: Activity Manager Service (AMS) への通知

  • LauncherがAndroidシステムの司令塔であるAMSに「〇〇アプリを起動してほしい」と伝えます。

Step 3: アプリプロセスの準備

  • AMSは、そのアプリのプロセスが存在するか確認します。
    • 存在しない場合(初めての起動など):
      • Android OSの特別なプロセスZygoteをコピーして、新しいアプリ用のプロセスを素早く作成します。
      • Zygoteとは
        アプリの起動を高速化するために、基本的なライブラリなどを予め読み込んで待機している「プロセスの雛形」です。
    • 存在する場合(バックグラウンドで待機中など):
      • バックグラウンドで待機中などの既存プロセスを再利用します。

Step 4: Applicationクラスの起動

  • 新しく作られたプロセス上で、アプリ全体の初期化を行うApplicationクラスがインスタンス化され、そのonCreate()メソッドが呼び出されます。(アプリ起動中に一度だけ呼ばれます)

Step 5: Activityの起動とライフサイクル

  • AMSは、AndroidManifest.xmlで指定された起動Activity(通常はMainActivity)のインスタンスを作成します。
  • ここから、以下のライフサイクルメソッドが順番に呼び出されます。
    • onCreate(): Activityが生成される最初のタイミング。UIのレイアウト設定など、起動時のほとんどの初期化処理をここで行います。
    • onStart(): Activityがユーザーに見えるようになる直前。
    • onResume(): Activityが完全に前面に表示され、ユーザーが操作可能になった状態。

Flutterの場合
起動されるActivityがネイティブのFlutterActivityとなり、そのonCreate()の中でDartの世界が動き出します。

Step 6: UIの描画

  • onResume()までの処理が終わると、AndroidフレームワークがonCreate()で指定されたレイアウト情報を元に、UI要素の計算→ 配置→ 描画を行います。
  • 最初のフレームがレンダリングされ、ユーザーはついにアプリの画面を見ることができます。

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?