Android Architecture Components Basic Sampleを眺める

なんとなくAndroidアプリ作れそうな空気は感じたけどどういう構造にするのが一般的なのか知りたかったのでこれを眺めている。

github.com

root

BasicAppがApplicationを実装しててこいつ経由でリポジトリとってこれるようになってる

db

  • DataGenerator
    • fixture的なやつ

converter

Utility的な

dao

Dao。 LiveDataで受けるようにすると、データの変更に対してXXXを発火、みたいなことができる

entity

Entity。

model

なんかデータのフィールドを持ってるinterface。entityが背負っている。 entityをmodelの層で使うぜ的なあれ?

ui

Activityがここにいる MainActivityのonCreateの引数のBundleてなんだろ

https://qiita.com/yyyske/items/c6e342a9008bebef75bd

Activityが死ぬとここになんか入ってくるらしい

Activityが破棄されたあとの復元時に必要なデータをbundleに突っ込んどいてonCreateでbundleがnullの時に復元すると良いらしい

が、このサンプルではそういうことをしてる感じがしないのでよくわからん

Adaptor

Flagmentでモデルに変更が入るとAdaptorに変更後のデータをセットする感じ RecyclerView.Adapterは多分RecyclerViewに値をバインドするのをやっている

Viewmodel

  • ViewModelがいる
  • ViewModelのファクトリが初期化されるタイミングでApplicationからリポジトリを取得してる
  • ViewModel自体はリポジトリとApplicationを受け取って初期化時に必要なデータを取ってきてる

ということはViewModelそのものは 画面に表示するためのデータを取ってきて保持するやつ という理解でいいのかな

ViewModelはFlagmentのonActivityCreatedで生成している。 https://github.com/googlesamples/android-architecture-components/blob/17c315a050745c61ae8e79000bc0251305bd148b/BasicSample/app/src/main/java/com/example/android/persistence/ui/ProductFragment.java#L68

onActivityCreatedはFlagmentが呼び出されたActivityのonCreateで呼ばれる http://sakura-bird1.hatenablog.com/entry/20111207/1323267262

その他

fragmentってなんだ https://qiita.com/Reyurnible/items/dffd70144da213e1208b Activityの画面の中に表示される一要素って感じ

ざっくり流れとしての理解

  1. MainActivityが呼び出されると、Fragmentを生成して画面要素にFragmentを追加?
    1. https://github.com/googlesamples/android-architecture-components/blob/17c315a050745c61ae8e79000bc0251305bd148b/BasicSample/app/src/main/java/com/example/android/persistence/ui/MainActivity.java#L34
    2. 画面側としてはFragmentのコンテナだけ用意しとく感じ
  2. FragmentのonCreateViewが呼ばれて、レイアウトが設定される
  3. FragmentのonActivityCreatedが呼ばれる
    1. ViewModelProviders経由でViewModelを生成する(ViewModelProvidersはViewModelのライフサイクルを管理してくれるらしい)
    2. subscribeToModelでモデルをサブスクライブする
  4. Daoからデータを変更すると、LiveDataで取得したデータについてオブザーブしている部分が発火する
  5. 変更後のデータをアダプター経由でViewに伝える

大体こんな雰囲気だと理解した