アクティビティライフサイクルの大まかな流れを把握する

# この記事は

**[Android 公式 Doc のアクティビティライフサイクル](https://developer.android.com/guide/components/activities/activity-lifecycle#alc)**  に、図など視覚情報を補足したもの。

**内容はあくまで参考にとどめてください**

---

以下のサンプルアプリ(仮称: `Lifecycle` アプリ) を使う。

* `Lifecycle` アプリには `MainActivity`, `SettingActivity` が存在する
* `Lifecycle` アプリ初回起動時は `MainActivity` が起動する
* `SettingActivity` は
    * `MainActivity` から `startActivity` で起動する
    * `finish()` で終了する


| MainActivity | SettingActivity |
| :--: | :--: |
| ![main_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/ca23914e-d6a4-592c-ff51-0096b810fd89.png) | ![setting_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/fdaa83aa-63fa-61d1-0742-5ce5e7056186.png) |

# 実行操作とライフサイクル順序

今回取り上げる実行操作は以下。

* [(1) アプリを開始する](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#1-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%99%E3%82%8B)
* [(2) アクティビティから別アクティビティを開始する](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#2-%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%93%E3%83%86%E3%82%A3%E3%81%8B%E3%82%89%E5%88%A5%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%93%E3%83%86%E3%82%A3%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%99%E3%82%8B)
* [(3) タスクボタンからアプリ一覧を表示する](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#3-%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8B%E3%82%89%E3%82%A2%E3%83%97%E3%83%AA%E4%B8%80%E8%A6%A7%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B)
* [(4) アプリ一覧表示から戻る](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#4-%E3%82%A2%E3%83%97%E3%83%AA%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%8B%E3%82%89%E6%88%BB%E3%82%8B)
* [(5) アプリ一覧から、アプリを終了させる](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#5-%E3%82%A2%E3%83%97%E3%83%AA%E4%B8%80%E8%A6%A7%E3%81%8B%E3%82%89%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E7%B5%82%E4%BA%86%E3%81%95%E3%81%9B%E3%82%8B)
* [(6) 特定アクティビティを終了する](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#6-%E7%89%B9%E5%AE%9A%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%93%E3%83%86%E3%82%A3%E3%82%92%E7%B5%82%E4%BA%86%E3%81%99%E3%82%8B)
* [(7) ホーム画面へ戻る](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#7-%E3%83%9B%E3%83%BC%E3%83%A0%E7%94%BB%E9%9D%A2%E3%81%B8%E6%88%BB%E3%82%8B)
* [(8) ホーム画面からアプリを再実行する](https://qiita.com/ymatsukawa/items/44ff307588734cbf302e#8-%E3%83%9B%E3%83%BC%E3%83%A0%E7%94%BB%E9%9D%A2%E3%81%8B%E3%82%89%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E5%86%8D%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B)

## (1) アプリを開始する

* `Lifecycle` アプリは未起動とする
* `Lifecycle` アイコンをタップすると、`MainActivity` が起動する

### ライフサイクル順序(上から順に実行される)

* `MainActivity` 
    * onCreate
    * onStart
    * onResume

| BEFORE | AFTER |
| :--: | :--: |
| ![home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/eec12650-65f8-ca91-c658-12ba21c0e013.png) | ![main_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/ca23914e-d6a4-592c-ff51-0096b810fd89.png) |

## (2) アクティビティから別アクティビティを開始する

* `MainActivity` から `SettingActivity` を `startActivity` で起動する

### ライフサイクル順序(上から順に実行される)

* `MainActivity`
    * onPause
* `SettingActivity`
    * onCreate
    * onStart
    * onResume
* `MainActivity`
    * onStop

| BEFORE | AFTER |
| :--: | :--: |
| ![main_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/ca23914e-d6a4-592c-ff51-0096b810fd89.png) | ![setting_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/fdaa83aa-63fa-61d1-0742-5ce5e7056186.png) |

## (3) タスクボタンからアプリ一覧を表示する

* `SettingActivity` を表示しておく
* ナビゲーションバー右下のタスクボタンをタップする

### ライフサイクル順序(上から順に実行される)

* `SettingActivity`
    * onPause
    * onStop

| BEFORE | AFTER |
| :--: | :--: |
| ![setting_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/fdaa83aa-63fa-61d1-0742-5ce5e7056186.png) | ![process_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/911cce6b-1ed1-c2f3-2d6e-f1e0aa65f8a0.png) |

## (4) アプリ一覧表示から戻る

* アプリ一覧表示の状態 (3) から、アプリをタップし戻る

### ライフサイクル順序(上から順に実行される)

* `SettingActivity`
    * onRestart
    * onStart
    * onResume

| BEFORE | AFTER |
| :--: | :--: |
| ![process_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/911cce6b-1ed1-c2f3-2d6e-f1e0aa65f8a0.png) | ![setting_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/fdaa83aa-63fa-61d1-0742-5ce5e7056186.png) |

## (5) アプリ一覧から、アプリを終了させる

* アプリ一覧表示の状態 (3) から、アプリをフリップする
* アプリ一覧に `Lifecycle` アプリが出ないようにする

### ライフサイクル順序(上から順に実行される)

* `SettingActivity`
    * onDestroy
* `MainActivity`
    * onDestroy

| BEFORE | AFTER |
| :--: | :--: |
| ![process_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/911cce6b-1ed1-c2f3-2d6e-f1e0aa65f8a0.png) | ![no_app.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/7bb31853-38bb-7166-8868-b0965fefaaa2.png) |

## (6) 特定アクティビティを終了する

* `SettingActivity` が表示されている状態にする
* `SettingActivity` にて `finish()` する
* `MainActivity` が表示される

### ライフサイクル順序(上から順に実行される)

* `SettingActivity`
    * onPause
* `MainActivity`
    * onRestart
    * onStart
    * onResume
* `SettingActivity`
    * onStop
    * onDestroy

| BEFORE | AFTER |
| :--: | :--: |
| ![setting_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/fdaa83aa-63fa-61d1-0742-5ce5e7056186.png) | ![main_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/ca23914e-d6a4-592c-ff51-0096b810fd89.png) |

## (7) ホーム画面へ戻る

* `MainActivity` が表示されている状態にする
* ホームボタンをタップする

### ライフサイクル順序(上から順に実行される)

* `MainActivity`
    * onPause
    * onStop

| BEFORE | AFTER |
| :--: | :--: |
| ![main_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/ca23914e-d6a4-592c-ff51-0096b810fd89.png) | ![home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/eec12650-65f8-ca91-c658-12ba21c0e013.png) |

## (8) ホーム画面からアプリを再実行する

* (7) の通りホーム画面へ戻る
* `Lifecycle` アプリのアイコンをタップする

### ライフサイクル順序(上から順に実行される)

* `MainActivity`
    * onRestart
    * onStart
    * onResume

| BEFORE | AFTER |
| :--: | :--: |
| ![home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/eec12650-65f8-ca91-c658-12ba21c0e013.png) |  ![main_activity.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31223/ca23914e-d6a4-592c-ff51-0096b810fd89.png) |

# 捕捉

クラッシュ・ANR などを考慮すると網羅はできていないが、ここまでにしておく。

本当にそうなるかは手元で同様のサンプルアプリを作り、ログを追いながら確認お願いしたい。

環境情報

* Android Studio 2020.3.1
* gradle 7.0.3
* JDK 1.8
* Windows 11(21H2)
* Android SDK
    * compile, target, min 共に 28