Androidのライフサイクル
Androidの特徴として、あるアプリケーションから別のアプリケーションの機能の一部を利用できることが挙げられます。 これを実現するためには、アプリケーションの一部分を必要に応じて開始(Javaのインスタンス化)できる必要があります。 そのため、Andoroidアプリケーションにはmain関数のようなアプリケーション全体にアクセスするような単一のエントリーポイントがありません。 その代わりに、必要に応じてアプリケーションの一部分をインスタンス化して実行するコンポーネントで構成されています。 コンポーネントには「アクティビティ」「サービス」「ブロードキャストレシーバ」「コンテンツプロバイダ」の4つがあります。
アクティビティ(Activity)とは、Androidアプリケーションの1つの画面に相当します。
プロジェクトの作成の「HelloWorld」と表示した画面も1つのアクティビティです。
HelloWorld.javaのソースから、HelloWorldクラスがActivityのサブクラスであるように、
アクティビティはActivityクラスのサブクラスとして実装されます。
サービスとはアクティビティのような視覚的なインタフェースを持たず、バックグラウンドで動作します。 ユーザが何か操作している間に裏で音楽を流したり、何か値を計算してその結果をアクティビティに渡したり するようなものが考えられます。 サービスはServiceクラスのサブクラスとして実装されます。
ブロードキャストレシーバとは、ブロードキャストを受信してそれに対処するコンポーネントです。 システムが発信するブロードキャストとしては、たとえばタイム ゾーンが変更されたこと、 バッテリーの残量が少なくなったこと、写真が撮影されたことなどが挙げられます。 ブロードキャストレシーバはBroadcastReceiverクラスのサブクラスとして実装されます。
コンテンツプロバイダとは、アプリケーションのデータを他のアプリケーションでも利用できるようにするコンポーネントです。 データはファイルで保存されているものやSQLiteというデータベースなど、一般に利用できる方法で格納されていれば使用できます。 コンテンツプロバイダはContentProviderクラスのサブクラスとして実装されます。
上記で説明した4つのコンポーネントのうち アクティビティ、サービス、ブロードキャストレシーバの3つは、 インテントと呼ばれる非同期メッセージによってアクティブ化されます。 アクティビティとサービスの場合は リクエストされているアクションを指名し、その対象となるデータの URI を指定する役割を持ちます。 なお、コンテンツプロバイダに関してはContentResolver からのリクエストによりアクティブ化されます。