Androidプラットフォームの特徴の1つは「低カップリング」です。ActivityはAndroidアプリケーションの基本的なユーザーUIモジュールで、Windowsフォームアプリケーションを参考にすれば、WindowsのWinFormに相当します。Windowsフォームアプリケーションを参考にすれば、ActivityはWindowsのWinFormに相当します。Windowsアプリケーションとは異なり、Activityの実行やActivity間のやり取りはメッセージを通して実現されます。つまり、WindowsのWinFormアプリケーションでは、Form例のShowメソッドやLoadメソッドを呼び出す必要がありますが、Activityを開始したり、Activity内で別のActivityを開始したい場合は、Intentメッセージを送信することで開始できます。IntentメッセージによるActivity間の相互作用は、モジュール間の結合を***程度に減らします。このメカニズムは、Subscriber/Publisher メカニズムに似ています。
Androidプラットフォームのもう一つの重要な特徴は「再利用」です。Androidアプリケーションは複数のアクティビティで構成することができます。トランプに例えると、Androidアプリケーションはトランプの箱に相当し、箱の中の各カードは比較的独立したActivityです。Androidアプリケーションの実行中は、トランプの山からカードを取り出して重ねるのと同じで、トランプの山から取り出されたカードがAndroidアプリケーションのメインActivityです。メインのActivityは他のActivityを呼び出すことができ、呼び出されたActivityはトランプのようにメインのActivityの上に配られます。これが「アクティビティ」のスタックです。端末で「戻る」を押すと、ブラウザのように前のActivityに戻ることができます。 Android携帯のアプリケーションはすべて同じ構造になっています。「再利用」とは、Androidアプリが実行中に他のアプリで定義されたActivityをトリガーできることを意味します。例えば、GTalkで友人の位置を地図上に表示したい場合、GoogleMapアプリは友人の位置を地図上に表示できます。例えば、GTalkで友人の位置を地図上に表示したい場合、GoogleMapで地図を表示することができれば、GTalkは同じコードを繰り返したり、似たようなActivityを実行する必要はなく、Intentメッセージで直接GoogleMapのMapViewActivityを起動することができます。
次の図は、Androidアプリケーションの基本コンポーネントを示しています。
Activityに加えて、AndroidはServiceも実装できます。ServiceはWindows Serviceに似ており、通常はバックグラウンドで実行され、ユーザーインターフェイスを含みません。基本的な機能はJava MEのPushRegistryに似ています。 たとえば、テキストメッセージを受信したときにアプリケーションをトリガーしたい場合は、AndroidアプリケーションのManifestファイルにBroadcast Receiverを定義してActivityをトリガーできます。
<activity android:name=”.HelloWorld”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
上記はAndroidManifest.xmlのHelloWorldのメインActivityの定義で、このActivityの対応するクラスと、このActivityをトリガーできるIntent-filterが定義されていますが、ユーザーがこのアプリケーションのアイコンをクリックすると、AndroidオペレーティングシステムからAndroidシステムは、IntentメッセージをサブスクライブするActivity、Service、またはBroadcast Receiverをチェックし、1つでも見つかれば、そのActivity、Service、またはBroadcast Receiverをトリガーします。HelloWorldの場合は、画面に「Hello World」と表示します。 また、Androidのリファレンスは、システムがIntentを送信するだけでなく、startActivity(Intent)やStartService(Intent)を使って、他のActivityやServiceを起動することもできます。同じアプリケーションであっても、Intentを通じて情報を送信する必要があるため、アプリケーション内のさまざまなモジュール間の結合が大幅に削減され、他の部分に影響を与えることなく、アプリケーション内のモジュールをシームレスに置き換えることができます。 Androidに触れた当初は、この仕組みはWinForm ).Show ()のように直接的で便利には感じないかもしれません。しかし、アプリケーションの保守性、拡張性、Androidの観点から、この低カップリング設計は非常に有利です。 また、複数のActivity間でデータを共有する必要がある場合、Applicationクラスを拡張することで、Applicationクラスで定義された変数にアプリケーション内のすべてのActivityからアクセスすることができます。





