【Android Java】いまさら聞けないActivityとは？



## はじめに
Android Javaって何？という初学者向けの記事になります。
アンドロイド特有の`Activity`についての内容です。

仕事でAndroid Javaを使って修正、開発をしています。
業務に携わってから約半年が経ちました。

Android Javaを使うにあたって、学んだことをアプトプットしようと思い記事にしました。

エンジニアになって1年の未熟者なので暖かい目で見ていただけると助かります。



## あなたは誰？
> 現職：SESエンジニア(歴1年)
前職：営業
年齢：27歳
使用言語：Java, Android Java, C++
工程：テスト、実装(設計もやってみたい…)
好きなこと：サウナ/登山/ダーツ/ピアノ/酒/運動全般
もくもく会主催：[新宿もくもく会](https://shinjuku-realize0707.connpass.com/)




## Acyivityとは
簡単に言うと`Activity`とは、スマホでいう**一つの画面全体**のことを言います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884151/d57602ec-734e-d73a-4c2b-9fbcebc6e18d.png"
width=50%>

皆さんスマホは持っていると思うので、いつもActivityを起動しているってことになりますね。

いろんなアプリが画面の中にはっていますね。
今見えている画面全体がActivityになります。

多くのアプリでは画面は1つではなく複数の画面から成り立っていることが多いので、その場合にはActivityも複数になります。



## 画像でイメージしてみよう

下の画像ではActivityが3つあって、Activityが切り替わると画面も切り替わるようなイメージでOKです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884151/c4ca5119-32ce-a3fb-ac2f-5e4498053773.jpeg" width=70%>


次の画像も同じようなイメージです。
「MOVE」と「RETURN」というボタンがありますね。
このボタンを押すと別のアクティビティ(画面)に切り替わるように処理が作られています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884151/e91f5ecb-0fd1-305e-3927-1955c9cafe0a.jpeg" width=70%>


## レイアウトと機能
:::note info
1つのActivityを構成しているのが以下の2つです。
・activity_main.xml → レイアウト
・MainActivity.java → 機能
:::


例えば以下の画面を表示するには次のような2つのソースが必要になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884151/23fc83c2-ff55-9a27-8ed0-e836e8cd309b.jpeg"
width=40%>


### activity_main.xml
⇓まずこちらのソースで画面のレイアウトを表示しています。
どんな画像を表示するか(`android:src="@drawable/main"`)
　・画面のどの位置に表示するか(`android:scaleType="fitXY"`)
どんなボタンを表示するか
　・画面のどこに表示するか(`android:layout_centerInParent="true"`)
　・ボタンのテキストはどうするか(`android:text="スタート"`)
```java:Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.test.rpggame.MainActivity">
 
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/main" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:onClick="onButton1"
        android:text="スタート"
        android:textSize="30sp" />
</RelativeLayout>
```

### MainActivity.java
⇓そしてこっちでボタンを押した時にどういう動きをするかという機能を付けています。
・`onButton1`というボタンを押した時に、`PlayActivity`のアクティビティ(画面)に遷移する
```java:MainActivity.java
package com.test.rpggame;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onButton1(View v) {
        Intent intent = new Intent(this, PlayActivity.class);
        startActivity(intent);
    }
}


```


## まとめ
* Activityとは画面全体のこと。
* 画面が切り替わるごとにActivityも切り替わる。
 ※Fragmentだけ切り替えてActivityはそのままにする方法もある。
* 画面はxmlファイルとActivityファイルの2つで構成される。


## 参考資料
[Androidアプリ開発の教科書 第2版](https://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%EF%BC%86%E5%BF%9C%E7%94%A8%E5%8A%9B%E3%82%92%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E8%82%B2%E6%88%90%EF%BC%81Android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E7%AC%AC2%E7%89%88-Java%E5%AF%BE%E5%BF%9C-%E3%81%AA%E3%82%93%E3%81%A1%E3%82%83%E3%81%A3%E3%81%A6%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AB%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%B7%B5%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3-WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%BD%8A%E8%97%A4%E6%96%B0%E4%B8%89-ebook/dp/B08WX4K7G4)
[【Androidアプリ開発】アクティビティとライフサイクルの重要性](https://techgrowup.net/2021/05/07/android-activity-lifecycle/)
[アクティビティの概要](https://developer.android.com/guide/components/activities/intro-activities?hl=ja)
[Androidアプリ作成の基本“Activity”とは何か？](https://atmarkit.itmedia.co.jp/ait/articles/0901/19/news122_2.html)
[Android開発のためのJava入門　第４回「Android Studioの使い方とActivityについて」](https://codeforfun.jp/java-for-android-4/)
[Android プログラミング【 アクティビティ⑥ 】 ~ ゲームの画面移行 ~](https://hakoniwadesign.com/?p=10066)
## おわりに
今回はかなりざっくりと`Activity`について解説してみました。
次はもう少し踏み込んだ説明ができるような記事を書けるように精進致します！

`Fragment`や`ライフサイクル`、`intent`についてはまた別の記事で解説していきます。

最後まで読んでいただきありがとうございました。
良かったら`LGTM`, `ストック`を押していただけると学習の励みになります。
また、記事の内容に間違いなどありましたら、コメントいただけると非常に勉強になります。

週末に[新宿でもくもく会](https://shinjuku-realize0707.connpass.com/)を開催しています。
興味ある方は見ていただけると嬉しいです。
https://shinjuku-realize0707.connpass.com/