【初心者向け】Android アプリの基本:アクティビティ


アクティビティの作り方

  1. Activity クラスを継承したクラスを作る。
  2. UIを定義したレイアウトファイルを用意。
  3. onCreate() メソッドを定義。
  4. onCreate() 内で setContentView() を使ってレイアウトファイルのビュー定義をアクティビティに追加。

アクティビティの起動

  1. インテントをインスタンス化する。

    Intent intent = new Intent(this, xxxActivity.class);
    
  2. インテントを引数にして、startActivity()メソッドを実行する。

    startActivity(intent);
    

アクティビティの起動メソッド 2種

  • startActivity():アクティビティを起動するのみ。
  • startActivityForResult():アクティビティを起動し、それが終了した際に起動元に結果を返す。

アクティビティの終了

  • finish()メソッドで終了する。
    【注意】finish()でアクティビティは閉じられるが、そのアクティビティが直ぐに破棄される(onDestroy()が呼ばれる)わけではない。アクティビティ破棄がスケジュールされてそれが処理されて onDestory() となる。

アクティビティ間でのデータ受け渡し(例:AからBへ)

  1. インテントのインスタンス生成
  2. B を起動するインテントのエクストラに渡したいデータをセットする。
  3. B を起動する。
    ※ 起動には startActivity()/startActivityForResult() どちらを用いてもよい。
  4. B にて、 Activity#getIntent() でインテントを取得する
  5. そこからデータ(エクストラ)を取り出す。(データ型に合わせ、getXXExtraを使う)

B(終了)→Aの遷移で、BからAのアクティビティへのデータ渡し

  1. B の起動に startActivityForResult() を用いる。
  2. B を終了する前に返したいデータをエクストラに設定したインテントを作りActivity#setResult() でそのインテントをセット。
  3. A に戻ると A 側で onActivityResult() メソッドが自動で呼ばれ、その引数で B で setResult() したインテントが渡されるのでそこでデータを受け取る。

アクティビティが再生成される状況(2つ)

  • 端末の回転などのコンフィグレーションが変更されたとき。
  • アクティビティをバックグラウンドにし、メモリ不足などでアクティビティが破棄され、そのあとフォアグラウンドに戻したとき。

再生成後のデータの変化

  • 再生成後、フィールド値は消える。
  • ビューの値:消えない
    標準ビューは再生成で状態を復元するようなメソッドがある。

アクティビティの状態を保存・復元の方法

  • 保存

    • onSaveInstanceState() が onStop() の前に必ず呼ばれる。
    • onSaveInstanceState() の引数に渡される Bundle (outState) にセットすることで行う。
  • 復元

    • onRestoreInstanceState() は onResume() の前だが、再生成時のときしか呼ばれない。
    • onRestoreInstanceState() または onCreate() の引数の Bundle (savedInstanceState) から取り出して行う。
    • 再生成ではない場合、onCreate() の savedInstanceState は null が渡される。