【Androidアプリ開発】ActivityとViewの基礎

# はじめに
自社の研修を通して、全くの未経験からAndroidアプリの開発を少し敷居が高いのかなと感じました。
なので今回はAndroidアプリ開発において基本的で重要な部分をまとめていこうと思います。
# Activity(アクティビティ)とは
**Activityとは**Androidアプリ開発における**画面**のことを指す用語になります。
画面とはつまり、ユーザーの操作とアプリとがやりとりをするエントリポイントとして機能をする重要な要素になります。
Androidアプリは基本的に複数のActivityによって構成され、それぞれのActivityにプログラムを記述して機能を持たせることで作られています。
特にアプリ起動時に表示される最初の画面をMain Activity(メインアクティビティ)と呼ばれます。
# Activityのライフサイクル
Activityには**ライフサイクル**と呼ばれる重要な概念があり、Activityを制御するうえで必須となる知識なのでここで説明しておきます。
Activityは「画面遷移」や「アプリキル」、「ホームボタンを押すことでバックグラウンドへ移動する」などの様々な動作によって、生成と消滅を繰り返します。
**ライフサイクルとは**このような**Activityの生成から消滅までの工程**のことを指しており、下図のような流れになっています。Activityの状態が変化するたびにコールバックメソッド経由で状態が通知される仕組みになっています。
※初心者にとっては少し難しいと思うので、ひとまずは **Activityの生成から消滅まで7つの工程がある** ということを覚えておくと良いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/974dd7f5-d728-58c1-a135-b29291b5e62d.png)

以下でそれぞれのコールバックメソッドについてまとめておきます。
## onCreate()
これはActivityが生成される際に最初に呼ばれるコールバックで、Activityごとに必ず実装する必要があります。
この部分に`setContentView()`を呼び出すことでレイアウトファイルとの紐づけをすることができます。

## onStart()
`onCreate()`が終了した後に呼ばれるコールバック。この時点でActivityは開始状態となっていて、ユーザーに表示されます。`onStart()`が呼ばれた後はすぐに`onResume()`が呼ばれます。

## onResume()
`onStart()`が終了した後に呼ばれ、Activityが前面に表示されてユーザーの操作を受け付けることができる状態になります。

## onPause()
ホームボタンを押したり、Activityが表示された状態で電話が来るなどでActivityが一時停止状態になるときに`onPause()`が呼ばれます。

## onStop()
Activityが完全にバックグラウンドに移動してユーザーに表示されなくなったときに`onStop()`が呼ばれます。
この後再びActivityに戻る場合は`onRestart()`が呼ばれ、アプリキルなどでActivityが完全に終了する場合は`onDestroy()`が呼ばれます。

## onRestart()
停止状態のActivityが復帰する際に呼ばれるコールバック。
この後は`onStart()`→`onResume()`の順で呼ばれます。

## onDestroy()
アプリキルなどでActivityが破棄される際に呼ばれるコールバック。

# 画面遷移のイメージ
冒頭で説明したように、基本的にAndroidアプリは複数のActivityによって構成されており、Activity間の遷移という動きはよくあることです。しかしAndroidアプリでの画面遷移の挙動は「遷移」という言葉のイメージとは少し異なっていると思います。
例えば「画面1」から「画面2」に遷移し、「画面2」で戻るボタン(バックキー)を押したときの挙動イメージは下図のようになります。
まず「画面1」から「画面2」に遷移する際は、遷移前の「画面1」の上に「画面2」が生成されて載るような挙動になっています。そしてその状態で戻るボタンを押すと、上に載っている「画面2」が消滅して前の画面である「画面1」が表示されるという挙動なので、紙芝居のようなイメージを持っておくと良いと思います。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/8501ea45-901d-cdec-2ac9-764beea32edc.png">


# Viewについて
ここまでActivity、つまり画面について説明をしてきましたが、Androidアプリの画面はボタンやテキストなどの画面部品を配置することで作成されます。そしてAndroidアプリ開発ではそのような**画面部品のこと**を **View(ビュー)** と呼びます。(ウィジェットとも呼ばれる) 
以下に代表的なViewを紹介します。
| Viewの名前 | 説明 | 見た目 |
|:-:|:-:|:-:|
|TextView|文字列の表示|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/b7d273ce-d52a-dfcc-609a-9b8e97b8d719.png)|
|EditText|テキストボックス|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/1b2f818c-d478-b59b-8dfc-3e9a8b41c1fe.png)|
|Button|ボタン|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/48973c9a-08a5-f0a9-e8d5-18175152aca2.png)|
|Switch|ON/OFFの切り替えが表現できるスイッチ|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/1449af2c-9fe8-13a2-9391-d682d92a1c32.png)|
|CheckBox|チェックボックス|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/cb7f380b-2c76-4a9e-a3e7-a5c21c9b7339.png)|
|RadioButton|ラジオボタン|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/35870d4d-2b18-a341-6e87-9f007cb87ffa.png)|
|ImageView|画像の表示|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767634/de963f2d-98c3-726f-bf49-70fdbb0c59b3.png)|
# まとめ
今回は完全初心者向けにAndroidアプリ開発で必須となる用語や概念の一部を紹介しました。
ライフサイクルの部分は少し難しかったかもしれませんが、この記事を通してまずはAndroidアプリの画面がどのような作りになっているのかのイメージをなんとなくでも掴んでくれたら嬉しいです。

## 参考
https://developer.android.com/guide/components/activities/intro-activities?hl=ja　

https://atmarkit.itmedia.co.jp/ait/articles/1604/04/news011.html