Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。
有効そうだけど、実態がよくわからないので、いろいろ調べて理解した内容をまとめました。
ソフトウェアアーキテクチャ
アプリケーションは多機能になるほど、プログラムが複雑になります。
複雑になると、次のような問題点が発生します。
- (1)不具合の発生確率が上がる
- (2)テストが難しくなる
- (3)メンテナンスが難しくなる
- (4)拡張性(スケーラビリティ)が低くなる
さらに、複雑さがn倍になると、問題の度合いがnの累乗のように増えます。
問題の度合いが増大してしまう「複雑」は、プログラマにとって大きな課題です。
長年、プログラマや研究者たちは、この「複雑」の解決策を探求してきました。
探求の中から登場してきたのが「ソフトウェア アーキテクチャ パターン」です。抽象化と問題の分割によって、複雑さを整理する試みが行われました。
例えば、UI(User Interface)をもつアプリケーションでは、「UIとデータを分離する」という考えから生まれたMVCやMVVMなどがあります。
パターン | 構成 |
MVC | Model | データの管理と処理(ビジネスロジック) | |
View | UIの外観と構造を定義(UIの表示) | (1)データを取り出して表示 |
Controller | 入力の取得 | (2)入力をModelへ伝達 |
 |
MVVM | Model | データの管理と処理(ビジネスロジック) | |
View-Model | 状態の保持
入力の識別 | (4)データを状態へ変換
(3)入力を処理へ変換 |
View | UIの外観と構造を定義(UIの表示)
入力の取得 | (1)状態を取り出して表示
(2)入力をView-Modelへ伝達 |
 |
・どちらもUI(View、View-Model)とデータ(Model)を分離した形を取ります。
・Slaveは与えられた指示に従うだけで、Masterが誰かを知りません。
・Modelは他のブロックに依存しません。ですので、再利用が容易です。 |
※「ソフトウェアアーキテクチャ」という言葉は、意味の範囲が広いので、ここでは「ソフトウェアの構成」という分野に絞った話になっています。
Androidアーキテクチャコンポーネント(AAC)
Androidアーキテクチャコンポーネントは、前述したMVCやMVVMといったパターンを取り入れたプログラミングを支援するコンポーネント(部品)の総称です。
次のようなコンポーネントが紹介されています。
コンポーネント | 概要 | 役割 |
Lifecycle | 特定のクラスにライフサイクルを持たせる
(ライフサイクル対応コンポーネント作成) | UIを分離する |
LiveData | データの更新を通知
(データの更新をきっかけに関数を実行) | UIを分離する |
ViewModel | ライフサイクルを超えたデータの引き継ぎ | UIを分離する |
Room | SQLite テーブルデータを Java オブジェクトに変換 | データの永続性を確保 |
Lifecycleの概要
Lifecycleは特定のクラスにライフサイクルを持たせることができます。このようなクラスを「ライフサイクル対応コンポーネント」と呼びます。

ビジネスロジックをActivityのライフサイクル中に処理を置く必要はありません。代わりにラフサイクル対応コンポーネント中へ置くことができます。
これにより、Activityはアプリの制御を外部へ追い出して、画面の表示制御に専念します。
※詳細は「Lifecycleでライフサイクル対応コンポーネント作成」を参照
LiveDataの概要
LiveDataは、データの更新を通知する監視機が付いた箱です。

Observerはvalueを監視していて、valueが更新されるとobserveによって登録されたonChange関数を実行(関数オブジェクトへ通知)します。
LiveDataが効果的な場面は、UI(User Interface)関連のデータの更新をきっかけにView(TextViewなどのWidget)の表示を更新する時です。
※詳細は「LiveDataでデータの更新を通知」を参照
ViewModelの概要
ViewMoldeはライフサイクルを超えて保持されるオブジェクトを作り、端末を回転させた場合などに発生する構成の変更の前後で、同じオブジェクトのインスタンスが取得できます。
つまり、ライフサイクルを超えたデータの引き継ぎが出来る仕組みです。

このオブジェクト内にUI関連のデータを格納しておけば、構成の変更後のActivityへ引き継ぐことができます。
※詳細は「ViewModelでライフサイクルを超えたデータの引き継ぎ」を参照
関連記事:
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「Lifecycle」です。 Lifecycleについて、まとめました。 【注意】 androidx.lifecycle:lifecycle-*:2.4.0以降は、@OnLifecycleEventが非推奨となり、DefaultLifecycleObserverを使った記述が推奨になっています。 ※詳細は「ライフサイクル対応コンポーネント作成(DefaultLifecycleObserverを使用)」を参照 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「LiveData」です。 LiveDataについて、まとめました。 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「ViewModel」です。 ViewModelについて、まとめました。 ...
Androidの開発スピードが速過ぎます。個人で習得を進めている私には、追い付いて行けません。 これが会社などであれば、グループ内のメンバーで分担して習得し、後に共有、などといった対応が可能でしょう。組織の強みですね! 先日も、久しぶりにAndroid Studioで新規プロジェクトを作成したら、Jetpack Composeのプロジェクトになってました。「はて?、これはどうすれば良いのだ?」と、頭の中は疑問符だらけで、プログラミングが先へ進めませんでした。 Jetpackの存在は知りながら、“使わなくてもアプリは作れる”と、学習は後回していたからです。 プロジェクトのひな型にJetpack Composeが採用されたならば、今後はJetpackの利用が開発の主軸になっていくのでしょう。 遅れ馳せならが、Jetpackの重要性を知った次第です。 ここで本腰をいれて習得しないと、さらに後方へ置いて行かれそうです。 という訳で、Jetpackの学習を始めました。 今回はJetpackそのものについてまとめます。 ※環境:Android Studio Flamingo | 2022.2.1 ...
View BindingはViewシステムを用いている場合に、プログラムから子Viewの参照を容易にする仕組みです。 Googleは「利点がある」と述べています。しかし、私は利点に感じないので、積極的な利用をしていません。 今まで、単なるオプションと考えていたのですが、最近は一般的になりつつあり、世に出回っているサンプルで頻繁に見かけるようになりました。 ですので、ここに備忘録として、まとめます。 ※環境:Android Studio Ladybug | 2024.2.1 Kotlin 1.9.24 (Viewシステムのプロジェクトは1.9.24が選ばれる) (Composeのプロジェクトは2.0.0が選ばれる) ...
Data BindingはViewシステムを用いている場合に、Viewの表示と状態(データ)を結合する仕組みです。 結合とは「状態の変化に連動して、表示を更新する」ことです。 Googleは「利点がある」と述べています。しかし、私は利点に感じないので、積極的な利用をしていません。 Googleが提供するAndroidアプリのサンプルで頻繁に登場し、よく見かけます。 ですので、ここに備忘録として、まとめます。 ※環境:Android Studio Ladybug Feature Drop | 2024.2.2 Kotlin 2.0.0 (Viewシステムのプロジェクトは1.9.24が選ばれる) (Composeのプロジェクトは2.0.0が選ばれる) ...
Activityと同じライフサイクルを持たせたクラスを「ライフサイクル対応コンポーネント」と呼びます。 このコンポーネントを作成する際に、以前はアノテーション@OnLifecycleEventを付ける記述を行っていました。 現在(androidx.lifecycle:lifecycle-*:2.4.0以降)は、@OnLifecycleEventが非推奨となり、DefaultLifecycleObserverを使った記述が推奨になっています。 DefaultLifecycleObserverを使用したコンポーネントの作成方法をまとめます。 ※ライフサイクル対応コンポーネントの詳細は「Lifecycleでライフサイクル対応コンポーネント作成」を参照 ※androidx.lifecycle:lifecycle-*:2.4.0の詳細は「バージョン2.4」を参照 ※環境:Android Studio Meerkat | 2024.3.1 Patch 1 Kotlin 2.0.0 androidx.lifecycle:lifecycle-*:2.6.2 ...