Activityクラス

android.appActivityクラス

Activityクラスとは?

 状態:-  閲覧数:2,637  投稿日:2013-04-08  更新日:2018-08-22  

「Androidアプリケーションの画面を定義している」クラス


MVC の Controller に相当
・画面のライフサイクルや、UI イベントの管理を受け持つ

特徴


1画面に付き1アクティビティ
・複数の画面があるアプリケーションの場合は複数のアクティビティを使用

画面処理は、ビューが担当
・Activityクラスのサブクラスは画面ごとに定義を行なうが、それ自体で画面の処理を行うのではなく、画面(テキストボックスやボタンなどの部品を表示する)処理は、ビュー(オブジェクト)が担当している

画面を必要としない場合
・Androidは画面を持たないアプリも作成可能で、その場合はActivityを使用しない
(画面を持つアプリは、必ずアクティビティを持つ)

(同じ画面に相当する)ウィンドウとの違い
・状況に応じて分岐する遷移状態を持つ
・インスタンスの保存・復帰する仕組みを持つ
・Android OSのタイミングで,強制終了・再起動される

複数同時起動できる?
・できない
・他の Activity が有効になったとき、今まで動いていた Activity は停止する

フォアグラウンド or バックグラウンド
・Activity は常にフォアグラウンドで動く
・Activity をバックグラウンドで動かすことはできない


ウィンドウ


1アクティビティに付き1ウィンドウ
・1つのアクティビティには1つのウィンドウが用意される

ウィンドウ内には任意のビュー(View)を配置可能
・Activity.setContentView() メソッドによって、Activity のウィンドウ内にビューを配置
※アクティビティでsetContentViewメソッドを使って配置できるビューは1つだけ
・これが Root View となる
・ビューの配置は、レイアウト定義XMLにて定義

クラス構成

 閲覧数:393 投稿日:2013-04-10 更新日:2014-04-29 

親クラス


java.lang.Object
 ↳ content.Context
  ↳ content.ContextWrapper
   ↳ view.ContextThemeWrapper
    ↳ app.Activity




直接子クラス


AccountAuthenticatorActivity, ActivityGroup, AliasActivity, ExpandableListActivity, FragmentActivity, ListActivity, NativeActivity


間接子クラス


ActionBarActivity, LauncherActivity, PreferenceActivity, TabActivity


「アプリケーション起動」及び「アクティビティのサイクル」

 閲覧数:403 投稿日:2013-04-16 更新日:2013-11-17 

起動


・アプリケーションが起動すると、まず指定されたActivityサブクラスのオブジェクトが、Androidのフレームワークによって生成される


サイクル


・複数の処理を同時に実行できるが、画面の最前面に表示されるアプリケーションは1つだけという決まりがある
・そのため、「作成時」「最前面になったとき」「そうでなくなったとき」「不可視になったとき」など、アプリケーションはさまざまな状態へと変化していく


1.起動 … onCreate()
2.開始 … onStart()
3.アクテイィビティ前面表示 … onResume()
― アクティビティ実行中 ―
4.アクティビティが前面でなくなる … onPause()
5.停止 … onStop()
6.破棄 … onDestroy()


Activityクラスのメソッド


振る舞い/処理フロー概要
・アプリケーション起動や終了、あるいは画面の回転などに応じて、指定されたものが順番に呼び出される






























・上図はあくまでイメージ
・実際に確認する方法の一つとしては、onRestart()、onStart()、onResume()、onPause()メソッドなどをオーバーライドして、System.out.println("onPause()が呼び出された!");などとデバッグ表記すれば良い
・ちなみに、System.out.printlnは、EclipseのLogCatビューに表示される(Android画面には表示されない)
・なお、LogCatビュー利用時には、フィルターを作成して表示行を絞り込むと良い(そうしないと、あらゆるログ出力が表示されるため、目的の表示が埋もれてしまう)
・フィルターを作成するには、LogCatビューにある+アイコンをクリック
・以下、実際にプロセスID(pid)→220でフィルタリングした例
04-02 02:02:30.658: INFO/System.out(220): onStart()が呼び出された!
04-02 02:02:30.658: INFO/System.out(220): onResume()が呼び出された!
04-02 02:02:30.668: DEBUG/ddm-heap(220): Got feature list request
04-02 02:03:27.878: INFO/System.out(220): onPause()が呼び出された!
04-02 02:26:58.227: INFO/System.out(220): onRestart()が呼び出された!
04-02 02:26:58.239: INFO/System.out(220): onStart()が呼び出された!
04-02 02:26:58.239: INFO/System.out(220): onResume()が呼び出された!
04-02 02:27:18.458: INFO/System.out(220): onPause()が呼び出された!
04-02 02:27:24.007: DEBUG/dalvikvm(220): GC freed 597 objects / 51312 bytes in 133ms
04-02 02:27:35.068: INFO/System.out(220): onRestart()が呼び出された!
04-02 02:27:35.068: INFO/System.out(220): onStart()が呼び出された!
04-02 02:27:35.068: INFO/System.out(220): onResume()が呼び出された!
04-02 02:27:43.167: INFO/System.out(220): onPause()が呼び出された!

・自分でエミュレータを触りながら、例えば、「HelloWorld」サンプルプログラムでも表示したり非表示にしたりしてみると、イメージが掴みやすい
・アクティビティがフォアグラウンドに表示される場合は、必ずonStart() → onResume() となることなどが、自分で確認できる


エラーの種類


・参考 
タイプ Log出力方法 ログの意味
V Log.v(TAG, "VERBOSE") 簡易メッセージ
D Log.d(TAG, "DEBUG") デバッグメッセージ
I Log.i(TAG, "INFO") 情報
W Log.w(TAG, "WARNING") 警告
E Log.e(TAG, "ERROR") 致命的エラー


Activityクラス … ライフサイクルに関するメソッド一覧

 閲覧数:464 投稿日:2013-11-11 更新日:2018-08-25 

メソッド一覧


ライフサイクルに関するメソッド一覧
メソッド名 概要 内容 強制終了
onCreate(Bundle) 起動 アプリケーションが起動した際に呼び出される(より正確には、アプリケーションが開始した際、「アクティビティを継承したクラス」のインスタンスオブジェクトが自動作成された段階で呼び出される)
・「インターフェイス作成」「アプリケーション初期化処理」「ビュー作成」「リストへのデータバインド」などは、このメソッドをオーバーライドしたメソッドへ記述
・引数としてBundleクラスのオブジェクトを受け取る(このアクティビティの 以前の状態が保存されていた場合、このメソッドにはその状態を保持している Bundle オブジェクトが引数として渡される)
・この後には、必ず onStart() が呼び出される
不可 onStart()
onStart() 開始 ・アクティビティが表示される(ユーザーから見えるようになる)直前に呼び出される
・その後、アクティビティがフォアグラウンドに表示された場合は onResume() が、他のアクティビティの後ろに隠れた場合は onStop() が呼び出される
不可 onResume()またはonStop()
onResume() 前面 アプリの画面が表示される時、メソッドが呼び出される
・Activityが表示される(アクティビティがユーザとのやり取りを開始可能になる)直前、 自動的に呼ばれる
・この時点で、アクティビティはアクティビティ スタックの最上位にあり、ユーザーからの入力はこのアクティビティに対して行われる
・この後には、必ず onPause() が呼び出される
不可 onPause()
onPause() 背面 他のアプリの画面に変わった時、メソッドが呼び出される
・システムが別のアクティビティを開始しようとしているとき( アクティビティが最前列でなくなる前)に自動的に呼ばれる
・例→現在の画面が他の画面を呼んだとき、Activityが裏(バックグラウンド)に隠れる直前に呼び出される
・このメソッドは一般的に重い処理に対して使用
・例→ファイルやDBなど、プログラム終了後もデータが失われないような場所へのデータ保存。アニメーションのように CPU を大量に消費する処理を停止する場合
・このメソッドが終了するまでは次のアクティビティが開始されないため、できる限り短時間で実行できるようにしておく必要がある
・その後アクティビティが再び前面に表示されるとonResumeメソッドが呼ばれる。またユーザーから見えなくなった場合は onStop() が呼び出される
可能 onResume()またはonStop()
onRestart() 再開始 ・アクティビティが再度開始される前(停止した後、それをもう一度開始する直前)に呼び出される
・この後には、必ず onStart() が呼び出される
不可 onStart()
onStop() 停止 ・アクティビティがユーザーから見えなくなったとき(不可視になった後)に呼び出される
・見えなくなる状況としては、アクティビティが破棄された場合や、再開された別のアクティビティ(既存か新規かを問わず)によって隠された場合が考えられる
・その後、アクティビティがユーザーとの対話に戻った場合は onRestart() が、アクティビティが完全に終了する場合は onDestroy() が呼び出される
・メモリ残量が少ないと、このイベントは呼ばれないままプロセスが破棄される場合もある
可能 onRestart()またはonDestroy()
onDestroy() 破棄 アプリが終了した時、メソッドが呼び出される
・アクティビティ終了時に呼び出される(アクティビティが破棄される直前に呼ばれる)
・これが、アクティビティが受け取る最後の呼び出しとなる
・このメソッドが呼び出される状況としては、アクティビティが完了する場合(finish() が呼び出されたとき)や、システムが領域を確保するために一時的にそのアクティビティのインスタンスを破棄する場合が考えられる
・これらの 2 つの状況は、isFinishing() メソッドを使用して識別できる
可能 なし
onSaveInstanceState(Bundle)
アクティビティの状態を保存させるためにこのイベントを呼ぶ。
しかし、デフォルトですべての状態を保存してくれるので、通常は気にしなくてもよい

onRestoreInstanceState(Bundle)
onSaveInstanceStateによって保存された状態からアクティビティが再初期化される直前に呼び出される

よく使うメソッド

 閲覧数:416 投稿日:2013-11-16 更新日:2013-11-23 

findViewById()


・ビューに対して割り当てられたリソースIDから対応するビューオブジェクトを取得(リソースIDから、GUIオブジェクトを取得)
引数
・リソースIDを指定
返値
・対応するViewオブジェクト


setContentView()


・アクティビティにビューを追加する「setContentView」メソッドには、引数の異なる3つのメソッドが用意されている

1.setContentView (int layoutResID)
・画面ビューを、「 レイアウトXMLファイルのリソースID」 で指定。具体的には、事前にXMLファイルを使ってビューの構造を定義しておき、そのXMLファイルをアクティビティに設定するためのメソッド。なお、 リソースIDはレイアウト用XMLファイル名が「ファイル名.xml」だった場合には「R.layout.ファイル名」で参照可能。また、「main.xml」だった場合には「R.layout.main」となる
・画面レイアウトを定義したXMLファイルからViewオブジェクトを作成し、それをActivityクラスに登録(ビューを作成)

2.setContentView (View view)
・ビューをアクティビティへ追加(作成した各ビューのオブジェクトを、アクティビティへ追加) 。 但し、配置方法は指定しない
・引数 … 追加するViewクラスのオブジェクトを指定

3.setContentView (View view, ViewGroup.LayoutParams params)
・ビューを単に追加するだけでなく、追加した後にどのように配置するのかを合わせて指定
・第1引数 … 追加するViewクラスのオブジェクトを指定
・第2引数 … どのように配置するのかを表すLayoutParamsクラスのオブジェクトを指定


getResources()


・戻り値として、android.content.res.Resourcesクラスのオブジェクトを取得
・返り値は、android.content.res.Resourcesクラスのオブジェクト

処理の流れ

 閲覧数:492 投稿日:2013-11-23 更新日:2013-11-25 

00. package


パッケージ宣言
package e1blue.androidstyle.hello;



01. import


インポート宣言
import android.app.Activity;//Android SDKに含まれるandroid.appパッケージのActivityクラス
import android.os.Bundle;//Android SDKに含まれるandroid.osパッケージのBundleクラス



1. クラスの継承


Activityクラスを継承
・アクティビティは、Activityクラスのサブクラスとして(継承して)実装

「Activityクラスを継承したクラス」のインスタンスオブジェクトとは?
・テキストボックスやボタンなどの部品を配置していく「画面オブジェクト」のこと
・Activityクラスを継承したクラス定義を行い、そのクラスの中で、画面にどのような部品を配置したり、ユーザーからのアクションをどのように処理するかを記述していく
※アプリケーションで使用する1つの画面毎にアクティビティを1つ用意

アプリケーション開始
public class HelloActivity extends Activity {// HelloActivityクラスは、「Android SDKのandroid.appパッケージにあるActivityクラス」を継承したサブクラス。また、アクセス修飾子にpublicを指定しているため、どのクラスからでも呼出可能。最初に表示されるアクティビティのオブジェクトが自動作成される(プログラムの中で他のアクティビティのオブジェクトを作成して別の画面を表示することもできる)



2.onCreateオーバーライド


・「Activityクラスのサブクラス」で、「ActivityクラスのonCreateメソッド」内容を上書き(アクティビティのオブジェクトを作成)
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {//オーバーライドしたonCreateメソッド定義(ActivityクラスのonCreateメソッド内容を上書きしている→ ActivityクラスのサブクラスでonCreateメソッドをアプリケーション独自の処理に置き換えている )。なお、処理順としては、最初に「onCreate」メソッドが呼び出され、初期化などの処理が行われる。 ちなみに、このアクティビティの 以前の状態が保存されていた場合、 「onCreate」 メソッドにはその状態を保持している Bundle オブジェクトが引数として渡される  

    ↓
super.onCreate(savedInstanceState);//superキーワードを使って、スーパークラスであるActivityオブジェクトのonCreateメソッドを呼び出し、 「onCreate」メソッドをオーバーライド
    ↓
TextViewクラスのインスタンスオブジェクトを生成。オブジェクト名(display)は、任意
TextView display = new TextView(this); 
    ↓
表示するテキスト内容を指定
display.setText("表示するテキスト内容を、ここで指定");
    ↓ 
アクティビティの中に、TextViewクラスのオブジェクトを配置
setContentView(display);
    ↓
アプリケーションを実行


デフォルトで作成されるソースコード


プロジェクトを作成するとデフォルトで作成されるソースコード
・コメントと改行を追記した例
package jp.androidstyle.tokyo;// パッケージ(package)宣言

import android.app.Activity // Android SDKに含まれるandroid.appパッケージのActivityクラス
import android.os.Bundle; // Android SDKに含まれるandroid.osパッケージのBundleクラス

public class SampleActivity extends Activity  // SampleActivityクラスは、「Android SDKのandroid.appパッケージにあるActivityクラス」を継承したサブクラス
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {//「onCreate」メソッドを定義。状態を保持している Bundle オブジェクトが引数として渡される
       super.onCreate(savedInstanceState); // superキーワードを使って、スーパークラスであるActivityオブジェクトのonCreateメソッドを呼び出し、 「onCreate」メソッドをオーバーライド

       setContentView(R.layout.main);//画面に配置する部品などを定義
   }
}



setContentViewメソッド

コメント投稿(ログインが必要)