Android入門(2)~アクティビティを作成する~

今回は、Androidアプリケーションのコンポーネントの1つアクティビティを作成する方法について勉強します。

Android Developers アクティビティ

アクティビティとは

アクティビティとは、ユーザが操作することのできる画面を提供するコンポーネントです。アクティビティは基本的に1つのアプリケーションに対して複数存在します。例えばメールアプリを起動すると設定した自分のメールアカウントの受信ボックスが開き、そこからメールの詳細画面を開いたり、メールを作成する画面を開いたりできます。それぞれの画面は別のアクティビティです。

メールアプリを起動すると、最初の画面である受信ボックスが開きます。このとき、受信ボックスのアクティビティが作成されます。

作成された受信ボックスのアクティビティはユーザが操作することができます。このとき、受信ボックスのアクティビティは実行中となります。

受信ボックスのメニューからメールの新規作成ボタンを押すと、新しくメール作成画面がポップアップで開きます。このとき、メール作成画面のアクティビティが開始され、受信ボックスのアクティビティは一時停止します。

ここでメールの作成を途中でやめてメール作成画面を閉じると、受信ボックスに戻ります。このとき、メール作成画面のアクティビティが破棄され、受信ボックスのアクティビティは再開します。

そしてこの後、受信ボックスから送信ボックスを開くと、送信ボックスへ画面全体が遷移します。このとき、受信ボックスのアクティビティは停止され、送信ボックスのアクティビティが開始されます。

このように、Androidのアクティビティはユーザの操作によって様々な状態に遷移します。これがアクティビティのライフサイクルです。

アクティビティを作成する

Android Studioをインストールする際、「Blank Activity」や「Empty Activity」を選んでプロジェクトを作成すると、「○○Activity.java」が自動で用意されていました。

この「○○Activity.java」が、作成したアクティビティについての処理を実装しています。「○○Activity.java」のクラス宣言は大体以下のようになっています。

AppCompatActivityクラスは継承関係を遡るとActivityクラスというクラスに行きつきます。Androidでアクティビティを作成するためには、そのActivityクラスのサブクラスを作成する必要があります。Android Studioでは、選択したアクティビティを作成するための適切なActivityクラスのサブクラスを始めに用意しているのです。ですので、このサンプルの例のように必ずAppCompatActivityクラスでないといけないということはありません。Activityクラスのサブクラスであればいいのです。

このActivityクラスには、アクティビティのライフサイクルに関わるメソッドが用意されています。それは以下となります。

メソッド 状態 説明
onCreate() 作成 アクティビティが最初に作成される際に呼ばれるメソッド。静的なセットアップを行う。
onStart() 開始 アクティビティがユーザーに見える状態になる。
onResume() 再開 このメソッドが呼ばれると再開中(実行中)になる。再開中になると、アクティビティは画面上の他のすべてのアクティビティの前面にあり、ユーザーの入力フォーカスがある状態になる。つまりユーザが操作できるようになる。
onPause() 一時停止 システムが別のアクティビティを再開する直前に呼び出される。例えば端末がスリープ状態になったり、ダイアログを表示するときなど。通常はここで、現在のユーザーセッション後も維持する必要のある変更点を保存しておく。
onStop() 停止 アクティビティがユーザーに見えなくなると呼び出される。
onDestroy() 破棄 アクティビティが破棄される前に呼び出される。
onRestart() 再起動 アクティビティが停止した後、再開する直前に呼び出される。

特に重要なものはonCreate()メソッドとonPause()メソッドです。onCreate()メソッドはアクティビティを作成するときには必ず実装します。

以下からは、アクティビティ作成に必要なことを説明します。

onCreate()のオーバーライド

本サイトで以前、Webサイトを表示するサンプルを作りました。まずはそのサンプルコードの中の「○○Activity.java」を見てみます。

onCreate()メソッドの引数であるBundleは、アプリの状態を一時的に保存できる入れ物です。例えば端末(画面)を回転させたり他のアプリが起動して全面に現れたりするなどライフサイクルが変わるときに元のアプリの状態を引き継ぎたい場合、その情報を取得/設定できます。そのために、ActivityクラスにはonSaveInstanceState(Bundle outState)メソッドとonRestoreInstanceState(Bundle savedInstanceState)メソッドというメソッドがあります。

アクティビティのライフサイクルにとっては覚えておくべきメソッドですが、今はそこまで勉強しないのでいったん保留します。

setContentView()メソッドは、アクティビティにレイアウトを適用します。レイアウトファイルのIDを指定すると、アクティビティに指定したレイアウトファイルのレイアウトを適用します。

setContentViewのViewというのは、アクティビティのUIです。分かりやすいところでいうとボタンやテキスト、上記のサンプルで使っているWebViewというのはWebページのためのUIです。

アクティビティのUIは、すべてViewクラスから派生したオブジェクトで提供されます。

onCreate()メソッドではレイアウト適用の他に、上記の例でいうとWebViewに対してjavascriptの有効化を設定したり静的な定義を行います。

マニフェストファイルにすべてのアクティビティを定義する

上記のサンプルの場合、マニフェストファイルはこうなっていました。

このうち、

というようなactivityタグがアクティビティの定義です。マニフェストファイルには、アプリで使用するすべてのアクティビティを定義する必要があります。

Android Studioでプロジェクトを作成すると、アプリ起動時に作成されるアクティビティは、intent-filterというタグで囲まれた定義が自動で設定されます。

このintent-filterというのは、アクティビティの開始に関するフィルタです。上記のintent-filterタグ以下に何が書かれているのかというと、このアクティビティがアプリケーションのメインアクションとして起動時に実行されるよ、という感じです。

今回はアクティビティが作成されるまで、つまりonCreate()メソッドが実行されるようになるまで、を勉強しました。

広告
  • LINEで送る