Androidのアプリケーションコンポーネンツ:Android技術者認定試験「ACE」ドリル(6)(2/2 ページ)
今回は、Androidのアプリケーション・フレームワークが持つコンポーネント群「アプリケーションコンポーネンツ」について。ACE対策としてだけでなく、Androidアプリ開発をする上でも必須知識となるのでしっかりと理解しておこう。
解答
演習1:答え(2)
まずは「Intent」について説明します。Intentとは、コンポーネント間(例:ActivityとActivity、ActivityとService)のやりとりを行う“非同期メッセージ”です。つまり、あるコンポーネントから、別のコンポーネントを起動するときに用いるものがIntentなのです。具体的には、画面遷移で使うことが一番多いですね。よって、演習1は(2)が正解となります。
なお、その他の選択肢は、他のコンポーネントの説明となっています。以下に5つのコンポーネントの機能概要をまとめます(表1)。ここで5つのコンポーネントの名称と、その機能概要をしっかりと理解しておきましょう。
コンポーネント | 機能概要 |
---|---|
Intent | コンポーネント間の非同期メッセージ |
Activity | ユーザーインタフェース(UI)とそのロジックの実行 |
Content Providers | 各種データを他のアプリケーションと共有 |
Service | バックグラウンド処理の実現 |
BroadcastReceiver | ブロードキャストされたイベントを受信 |
表1 5つのコンポーネントの機能概要 |
演習2:答え(4)
「Activity」は、UIを実現するコンポーネントですが、画面上のUIのパーツはViewを配置することによって実現します。つまり、テキスト入力域やボタンなどのUIのパーツはViewの一種となり、それがActivity上に配置されています(選択肢(1))。
また、Activityは“状態”を持っています。具体的には、アクティビティが表示されていて、操作可能な状態を「フォアグラウンド」、表示されていない状態を「バックグラウンド」、アクティビティが表示されているが操作できない状態を「ビジブル」と呼びます。よって、操作しているActivityの状態はフォアグラウンドなので、演習2は(4)が誤りとなります。
次に、Activityのライフサイクルについてですが、こちらは下の図のように定義されています(図1)。
図1の「Activityのイベント」とは、端的にいえば、呼び出されるActivityのメソッド名となります。例えば、Activityが起動した際には、
onCreate() → onStart() → onResume()
の順で該当Activityのメソッドが呼ばれ(選択肢(2))、フォアグラウンド状態となります。このライフサイクルのフローは非常に重要な知識ですので、しっかりと理解してください。
画面遷移に関しては、演習1の解説にある通り、Intentを用いて実現します(選択肢(3))。
演習3:答え(4)
「Content Providers」を独自実装するには、ContentProviderクラスを継承したクラスを作成する必要があります。その際、ContentProviderクラスは抽象メソッドを保持しているため、独自実装したクラスには必ずそれらのメソッドを実装する必要があります。具体的には、以下の6メソッドとなります(図2)。
図2より、演習3は(4)が誤りとなります。
なお、Content Providersは、各アプリケーションが独自に実装したものだけではなく、Androidが提供しているものもあります。例えば、通話ログやコンタクトリストにアクセス可能なContent Providersがあらかじめ用意されており、各アプリケーションから利用可能になっています。
演習4:答え(2)
「Service」を実行する方法は、2つあります。1つがIntentを用いて起動する方法(選択肢(1))。もう1つが、Activityへのbindを用いる方法です(選択肢(3))。前者の方がコーディングは容易ですが、後者の場合はService開始後にも、そのServiceに対して操作を行うことができます。処理を非同期で行わせたいだけの場合は前者、ミュージックプレーヤーのように再生途中で停止などの処理を途中で行いたい場合は後者を利用することになります。
また、作成したServiceは、必ずAndroidManifest.xmlに登録しておく必要があります(選択肢(4))。これは、今回学習している5つのコンポーネントのうち、Intentを除く4つのコンポーネントについても同様です。例えば、Activityを新たに作成した際は、AndroidManifest.xmlに登録する必要があります。
通常、Serviceは処理が終了しても、そのインスタンスは生存し続けます。よって演習4は(2)が誤りとなります。
演習5:(3)
「BroadcastReceiver」とは、ブロードキャストされたIntentを受信する仕組みを持っています(選択肢(2))。ブロードキャストされたIntentとは、システムの全体に対して投げられるIntentです。例えば、ActivityからActivityを起動する際のIntentは起動するActivityにのみ投げられますが、ブロードキャストされたIntentは全体に対して投げられています。そのIntentを受信するのがBroadcastReceiverです。また、ブロードキャストされるIntentは、そのIntentにより起動するコンポーネントが明示的ではないので、“暗黙的Intent”と呼ばれています(選択肢(4))。
なお、ブロードキャストされたIntentは、システムの状況が変化した際(例:システムの起動完了、電池の残量の変化)に投げられていますが、各アプリケーションが独自にIntentをブロードキャストすることも可能です。
また、選択肢(3)についてですが、BroadcastReceiverからActivityを起動することは“可能”です。よって演習5は(3)が誤りとなります。ただし、ユーザーからすると意図せず突然に画面が表示されますので注意が必要です。
最後になりますが、BroadcastReceiverが起動した際は、そのクラスが持つonReceiveメソッドが呼び出されます。つまり、私たちはonReceiveメソッドに、Intentを受信した際に実行したいロジックを記載することになります。そのonReceiveメソッドが完了すると、そのBroadcastReceiverのインスタンスは削除されます。ActivityやServiceのように生き残らずに、非常に短い人生を繰り返すのがBroadcastReceiverです。
ここまでの内容で、本連載におけるアプリケーションコンポーネンツの学習は終了です。ACE合格対策を考えると、この単元は“重要度の高い=出題頻度の高い”項目がめじろ押しです。また、Androidアプリケーションを開発する上でも、最重要項目です。これが分かっていなければ、アプリケーションは作れないといっても、過言ではありません!
さて次回は、「ストレージ」について学んでいきます。ストレージの単元が終われば、重要な項目の多くは学習済みとなります。つまり、合格がそれだけ近づいているということですね。それでは次回もご期待ください! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.