Androidプログラミング入門してみた-アーキテクチャ編-
仕事でAndroidアプリの開発をすることになったので、改めてAndroidプログラミングについて勉強してみたいと思います。
今回は主に書籍( 本格アプリを作ろう! Androidプログラミングレシピ)を参考にして進めました。
アプリケーションアーキテクチャについて
Androidアプリのアーキテクチャは、「intent(以下、インテント)」を用いて相互にコミュニケーションを行うコンポーネントの集合がベースになっているそうです。 インテントとは、実行すべき処理や外部イベントが発生したことを他のコンポーネントに通知するために使われるメッセージです。
コンポーネント
ついさっきあったように、コンポーネントはAndroidアプリを構成する要素です。 Androidアプリのエントリポイントは、C言語のmain()関数のように定まったものはなく、代わりにアプリが必要に応じてインスタンス化して実行できるコンポーネントを使用することになります。
アクティビティ
コンポーネントの1種類。 ユーザがアプリと対話処理できるようにUIが提供するコンポーネント。自分の理解ではViewを持っているコンポーネント。
サービス
コンポーネントの1種類。 バックグラウンドで実行されて、アクティビティの様にViewは持たない。UIが表示されていないとき何がしかの処理を行うために用いる。そのためにスレッドを生成したり、別プロセスで実行されたりする。
ブロードキャストレシーバ
コンポーネントの1種類。 同報通信(broadcast)を受信して、それに対する処理を行う。名前の通り。Viewは持たないが、アクティビティの起動したり通知マネージャで画面へ情報を表示する。
コンテンツプロバイダ
コンポーネントの1種類。 アプリが管理するデータを、他のアプリからも使えるようにする。データはAndroidファイルシステムでもSQLiteでも、何でもOK。データプロバイダを使うことで、データのフォーマット変更による影響をコンポーネントが受けないように出来る。
インテント
コンポーネント間のメッセージ。 インテントは明示的、暗黙的の2種類に分類される。
明示的インテント
ターゲットとなるコンポーネント名を指定したインテント。アプリの内部メッセージとして使われる。
暗黙的インテント
ターゲットとなるコンポーネント名を指定しないインテント。他のアプリのコンポーネントを起動するために用いられることが多い。 暗黙的インテントの処理に最適なコンポーネントを探す処理の際、AndroidはIntentオブジェクトの内容とインテントフィルタを比較する。
インテントフィルタ
コンポーネントがどんなインテントを受け取ることができるか?を明示するためのマニフェスト情報。 インテントフィルタを持たないコンポーネントは、明示的インテントしか受け取らない。
マニフェスト
アプリの持つ情報やアプリケーション間の相互連携に必要な設定、コンポーネント、インテントフィルター情報を含む。 アプリをインストールするときに確認されるようなパーミッション付与についても情報を持っている。
この辺がわかりやすいサイトがあったので参考にしました。
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型