アクティビティ

Posted by muchag | Android |
初回投稿:2011-01-22 (土) 16:28:33 | 最終更新:2011-04-02 (土) 19:06:03

アクティビティ は、ユーザの目に触れるものでアプリ作成の基本。

アクティビティは、ユーザーが 1 つの操作を集中的に行うための
視覚的なユーザー インターフェースを表します。
たとえば、ユーザーが選択できるメニュー アイテムの一覧を表示するアクティビティや、
写真をキャプション付きで表示するアクティビティなどが考えられます。
SMS アプリケーションなら、あるアクティビティでメッセージを送信する連絡先の一覧を表示し、
別のアクティビティで選択した連絡先へのメッセージを入力し、
その他のアクティビティで古いメッセージを参照したり設定を変更したりできます。
これらのアクティビティを組み合わせて全体としてのユーザーインターフェースを形成しますが、
それぞれのアクティビティは相互に独立しています。
各アクティビティは、Activity 基本クラスのサブクラスとして実装されます。

アプリケーションは、1 つのアクティビティで構成することも、
上記のSMS アプリケーションのように複数のアクティビティで構成することもできます。
どのようなアクティビティがいくつ必要になるかは、アプリケーションやその設計に応じて異なります。
通常は、アクティビティのうちのいずれかを最初のアクティビティとして指定し、
ユーザーがアプリケーションを起動したときに表示します。
あるアクティビティから別のアクティビティに移動するには、現在のアクティビティから次のアクティビティを開始します。

各アクティビティには、それを表示するためのデフォルトのウィンドウが割り当てられます。
通常はウィンドウを画面全体に表示しますが、
画面より小さいウィンドウを他のウィンドウの前面に表示することもできます。
アクティビティに、新たなウィンドウを追加することも可能です。
たとえば、アクティビティの途中でユーザーの応答を要求するポップアップダイアログを表示したり、
ユーザーが画面上の特定のアイテムを選択したときに別ウィンドウで重要な情報を表示したりできます。

ウィンドウの視覚的なコンテンツは、ビュー(View 基本クラスの派生オブジェクト)の階層として提供されます。
各ビューは、ウィンドウ内の特定の矩形領域を制御します。
親ビューは、その子となるビューで構成され、それらの子ビューのレイアウトを決定します。
リーフビュー(階層の最下位に位置するビュー)は、そのビューが制御する矩形領域に表示され、
その領域でのユーザーのアクションに対して応答します。
つまり、ビューはアクティビティとユーザーが対話する場所です。
たとえば、ビューに小さな画像を表示し、
ユーザーがその画像をタップしたら何らかのアクションを開始することもできます。
Android には、ボタン、テキスト フィールド、スクロール バー、メニューアイテム、チェックボックスなど、
さまざまなビューがあらかじめ用意されています。

ビューの階層は、Activity.setContentView() メソッドを使用してアクティビティのウィンドウ内に配置します。
コンテンツ ビューは、階層のルートとなる View オブジェクトです
(ビューおよびその階層について詳しくはUser Interface のドキュメントをご覧ください)。

Android Developers:開発の基礎

ライフサイクル

アクティビティを生成してから破棄するまでの流れ。
アクティビティの状態に応じて、該当する関数が呼び出される。

非常にわかりやすいサイトがあったので
まだ初心者の私は、ひとまずこちらを引用&参考させていただきまとめた。
以後、理解が深まるに連れて自分なりの記事に修正していく。

引用&参考元サイト:rokuta96のAndroidアプリ開発 アクティビティのライフサイクル

以下の引用内容は覚書用に私が抜粋&改変しているので、
ご覧のみなさまは、上記 引用&参考元サイト から本物をご覧ください。

 
 
呼び出される関数は
onCreate()
onRestart()
onStart()
onResume()
onPause()
onStop()
onDestroy()

 
ここから抜粋引用&一部改変—

onCreate()

アクティビティが初めて作成されるときに呼び出されます。
通常の静的な設定(ビューの作成、リストへのデータのバインドなど)は、すべてのこのメソッドで行う必要があります。
このアクティビティの 以前の状態が保存されていた場合、このメソッドにはその状態を保持している Bundle オブジェクトが引数となります。
この後には、必ずonStart()が呼び出されます。
強制終了:不可
次:onStart()
 

onRestart()

アクティビティが停止した後、それをもう一度開始する直前に呼び出されます。
この後には、必ずonStart()が呼び出されます。
強制終了:不可
次:onStart()
 

onStart()

アクティビティがユーザーから見えるようになる直前に呼び出されます。
その後、アクティビティがフォアグラウンドに表示された場合はonResume()が、他のアクティビティの後ろに隠れた場合はonStop()が呼び出されます。
強制終了:不可
次:onResume() または onStop()
 

onResume()

アクティビティがユーザーとの対話を開始する直前に呼び出されます。
この時点で、アクティビティはアクティビティ スタックの最上位にあり、ユーザーからの入力はこのアクティビティに対して行われます。
この後には、必ずonPause()が呼び出されます。
強制終了:不可
次:onPause()
 

onPause()

システムが別のアクティビティを開始しようとしているときに呼び出されます。
このメソッドは、保存されていない変更を永続データにコミットする場合や、アニメーションのように CPU を大量に消費する処理を停止する場合に使用するのが一般的です。
このメソッドが終了するまでは次のアクティビティが開始されたないため、できる限り短時間で実行できるようにしておく必要があります。
その後、アクティビティがフォアグラウンドに戻った場合はonResume()が、ユーザーから見えなくなった場合はonStop()が呼び出されます。
強制終了:可能
次:onResume() または onStop()
 

onStop()

アクティビティがユーザーから見えなくなったときに呼び出されます。
見えなくなる状況としては、アクティビティが破棄された場合や、再開された別のアクティビティ(既存か新規かを問わず)によって隠された場合が考えられます。
その後、アクティビティがユーザーとの対話に戻った場合はonRestart()が、アクティビティが完全に終了する場合はonDestroy()が呼び出されます。
強制終了:可能
次:onRestart() または onDestroy()
 

onDestroy()

アクティビティが破棄される前に呼び出されます。
これが、アクティビティが受け取る最後の呼び出しとなります。
このメソッドが呼び出される状況としては、アクティビティが完了する場合(finish()が呼び出されたとき)や、システムが領域を確保するために一時的にそのアクティビティのインスタンスを破棄する場合が考えられます。
これらの 2 つの状況は、isFinishing()メソッドを使用して識別できます。
強制終了:可能
次:なし
 

  1. package com.example.activitytest;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6.  
  7. public class ActivityTest extends Activity {
  8.     /** Called when the activity is first created. */
  9.     @Override
  10.     public void onCreate(Bundle savedInstanceState) {
  11.         Log.i("TEST", "onCreate() called.");
  12.         super.onCreate(savedInstanceState);
  13.         setContentView(R.layout.main);
  14.     }
  15.    
  16.     public void onStart() {
  17.         Log.i("TEST", "onStart() called.");
  18.         super.onStart();
  19.     }
  20.    
  21.     public void onRestart() {
  22.         Log.i("TEST", "onRestart() called.");
  23.         super.onRestart();
  24.     }
  25.  
  26.     public void onResume() {
  27.         Log.i("TEST", "onResume() called.");
  28.         super.onResume();
  29.     }
  30.    
  31.     public void onPause() {
  32.         Log.i("TEST", "onPause() called.");
  33.         super.onPause();
  34.     }
  35.    
  36.     public void onStop() {
  37.         Log.i("TEST", "onStop() called.");
  38.         super.onStop();
  39.     }
  40.  
  41.     public void onDestroy() {
  42.         Log.i("TEST", "onDestory() called.");
  43.         super.onDestroy();
  44.     }
  45. }

ライフサイクルに関わるonなんとか関数には、super.onXXXを最初に呼ばなければいけないそうです。
ここまで抜粋引用&一部改変—
 

まとめ

というより、現時点で理解できたこと。

アクティビティ生成時:onCreate()
可視化時:onStart() ← 復帰時:onRestart()
可触化時:onResume()
不可触化時:onPause()
不可視化時:onStop()
アクティビティ破棄時:onDestroy()
 

作成

アクティビティを作成するには、まずクラスファイルを1つ追加する。

[ファイル]-[新規]-[クラス] から
クラスファイルを新規作成する。

 
このとき、先に左ペインにあるパッケージ・エクスプローラの
当該パッケージまたは当該パッケージ内のファイルを選択しておくか、
そのファイルを開いてアクティブな状態で上記操作を行うと・・・

 
プロジェクト名とパッケージ名を自動入力してくれる。

また、左ダイアログで「スーパークラス」に android.app.Activity と入力しておくと
自動で Activity クラスを継承したクラスを生成してくれる。

 
自動生成されたコード。

  1. package com.example.hoge;
  2.  
  3. import android.app.Activity;
  4.  
  5. public class Sample extends Activity {
  6.  
  7. }

これでアクティビティを作成するためのクラスファイルが無事に完成。
 

AndroidManifest.xml への登録

後、忘れてはいけない のが AndroidManifest.xml への登録。
アクティビティ(コンポーネント)を追加する度に、必ず登録をすること。

左ペインのパッケージ・エクスプローラから
AndroidManifest.xml を開く。

 
①中央ペインの下部にあるタグの中から「アプリケーション」を選択。

②左画像に印した場所の「追加」をクリック。

 
「Activity」を選択して「OK」。

 
①先ほどクリックした「追加」の左側に、
新しく「Activity」ができているので、それを選択。

②右にある「Attributes for Activity」の Name* というところに
新しく作成したクラス名を手動入力するか
その右の「参照」をクリックしてクラスファイルを選択。

最後にセーブすれば無事に登録される。

中央ペイン下部のタブ群にある「AndroidManifest.xml」をクリックしてみれば
[mxml][/mxml]
と、追加されていることがわかる。

ん? ってことは、最初から AndroidManifest.xml を開いて
上記1行を追加すればいいんやんか・・・。
SSまで撮ったのにガッカリ。
すぐ気がつかないのは、相当頭がウニってるらしい。。。 🙄
 

起動モード

Android Wiki for Developers:アクティビティの起動モード
Androidメモ:アクティビティの起動モードと起動フラグ
 

呼出

Intent

Posted by muchag | Android |
初回投稿:2011-01-22 (土) 16:28:33 | 最終更新:2011-04-02 (土) 19:06:03

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment