minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

Android の大きな特徴の一つは、許可されていれば
あるアプリケーションから別のアプリケーションの要素(コンポーネント)を利用できる点です。
このとき、アプリケーションに他のアプリケーションのコードを組み込んだり
リンクしたりする必要はありません。

この仕組みを機能させるために、Android アプリケーションは main 関数を持っていません。
代わりに、システムが必要に応じてインスタンス化して実行できるコンポーネントとして構成されます。
コンポーネントには、以下の4種類があります。

Activity

一つの視覚的なユーザインターフェイス(UI)を表します。
アプリケーションは一つの Activity で構成することも、複数で構成することもできます。
各 Activity には、それを表示するためのデフォルトウィンドウが割り当てられます。

ウィンドウの視覚的コンテンツは、ビュー(View)として提供されます。
Activity.setContentView() メソッドによって、Activity のウィンドウ内にビューを配置します。
これが Root View となります。

Activity は常にフォアグラウンドで動きます。
他の Activity が有効になったとき、今まで動いていた Activity は停止します。
Activity をバックグラウンドで動かすことはできません。

Service

UI を持たず、バックグラウンドで実行されます。
Activity と違い、いくつもの Service をバックグラウンドで動かすことができます。

Broadcast Receiver

あらゆるブロードキャスト(イベント)を受信して、それに対処します。
写真撮影、電池の残量が少なくなった、など様々なブロードキャストがあります。
イベント受信コンポーネントと考えれば、わかりやすいでしょう。

Content Provider

アプリケーションのデータを、他のアプリケーションから利用できるようにするコンポーネントです。
ファイルや SQLite など、一般的なデータが使用できます。

コンポーネントのアクティブ(有効)化

Content Provider は、ContentResolver からリクエストがあったときにアクティブ化されます。
それ以外の3つのコンポーネントは、Intent と呼ばれる非同期メッセージによってアクティブ化されます。

Activity

Activity を起動させるには、Intent オブジェクトを
Context.startActivity() または Activity.startActivityForResult() に渡します。
前者は Activity が結果を返さない場合、後者は返す場合に使用します。
※ Activity は Context を継承している

Service

Service を開始するには、Intent オブジェクトを Context.startService() に渡します。
代わりに Context.bindService() を使うと、Service に接続します。
※ 両者の使い分け方については Service を参照

Broadcast Receiver

レシーバは、Intent オブジェクトを Context.sendBroadcast() などのメソッドに渡すことによって実行されます。

コンポーネントの終了

コンポーネントの種類によって異なります。

Activity

Activity を自身で終了させるには、finish() メソッドを呼び出します。
他の Activity を終了させたい場合は、finishActivity() メソッドにリクエストコードを渡して呼び出します。

Service

Service を自身で終了させるには、stopSelf() メソッドを呼び出します。
他の Service を終了させたい場合は、Context.stopService() メソッドに Intent を渡して呼び出します。

Broadcast Receiver

ブロードキャストメッセージ(イベント)に応答している間のみアクティブになります。
よって、このコンポーネントを明示的に終了させる必要はありません。
応答するメソッドが終了すれば、このコンポーネントは自動的に終了します。

Content Provider

このコンポーネントは、ContentResolver からのリクエストに応答している間のみアクティブになります。
よって、このコンポーネントを明示的に終了させる必要はありません。
応答するメソッドが終了すれば、このコンポーネントは自動的に終了します。