hamburger

主に日記

読書メモ プロに追いつくAndroid開発入門

booth.pm

技術的負債に向き合う

  • God ClassFatActivityDelegate
  • 実装の共通化
  • 実装の強制はabstractよりもinterface
  • 継承を使う場合はis-aを意識する

Androidアプリ開発におけるMVVMアーキテクチャ

  • Viewとロジックを明確に分離する手段としてアーキテクチャを使う
  • privateなmutavleLiveDataとpublicなLiveData
  • 今はAndroidXとDataBindingを利用したMVVMがおすすめ

ライフサイクル生存戦略

  • Jetpack Lifecycleを利用することで、Activity/Fragmentからライフサイクルステータスの変化に対応するための処理を分離できる
  • Lifecycleで実行できるのは、Activityで定義されているものだけ。onViewCreatedのようなFragment特有なものは用意されていない
  • Activityの再生成に対応する場合はonSavedInstanceStateを利用する。これはViewModelでも利用できる。

ライルサイクルをコントロールするLiveDataとViewModel

  • LiveDataはライフサイクル的にアプリがアクティブの場合のみpublishするデータホルダー
  • ViewModelはActivityのonCreateからfinishまで生存するオブジェクト。onSavedInstanceStateよりも柔軟かつ高速にデータの読み書きができるが、プロセスの終了には対応できないので使い分けが重要。
  • ViewModelStoreOwnerに親Activityを指定することで、異なる子Fragment同士でFragmentのライフサイクルを気にせずにデータの共有が可能
  • ViewModelはデータではなくデータソースを持つ。その際MediatorLiveData,Transformationsなどの便利クラスも活用すべし

コルーチンとアーキテクチャ

  • コルーチンスコープ単位でキャンセルや例外補足が可能
  • コルーチン内で発生したレスポンスはResult型で表現すると便利
  • asyncは返却する。launchは値を返却しない。joinでlaunchの終了を待てる
  • withContextでスレッド制御
  • applicationScopeでviewModelのライフサイクルから外れた制御もできる

ビルド速度を改善したいけど何をすればいいの

  • Build Analyzerで各工程ごとのビルド時間の計測が可能
  • Android Gragle pluginはビルド速度改善のアップデートが多いため、最新版の利用を推奨
  • Gradleデーモンに割り当てるメモリ
  • ビルドのオフラインモード

メモリリークの謎を追う

  • rxjavaの非同期通信でviewの参照を持ったときはdisposableのclear()を利用する。それか github.com を活用
  • LiveDataをViewから購読するようにすることで参照方向を逆転できる。
  • AlertDialogはactivityのcontextを利用すると画面回転などの対応ができないため、DialogFragmentのcontextを利用する
  • FragmentManagerが持つFragment参照とViewのライフサイクル。今まで意識してなかったのでbindingをlateinitで宣言してた。業務で色々改善できそう
  • Bitmapの直接の利用は極力避け、Glideなどのライブラリやurlなどの参照形式で代替できないか検討する
  • LeakCanaly,strict mode

感想

感覚的には、知っていることが5割、知識の整理につながったのが4割、完全新規で得られた情報が1割くらい。
ある程度知識がついてくると初級者向けの書籍などはコスパが悪くなってくるし、かと言って最新のドキュメントを追い続けるのも最近は時間的にしんどい。そういった意味でこの書籍は今のAndroid開発を俯瞰して確認できてありがたかった。
個人的に今後Androidの最新情報を得る手段としては、日々の業務での調査+信頼できる人たちが書いた技術書展系の書籍でdiffの取り込みを繰り返すのがちょうど良さそう。
技術同人誌にかけるお金を少し増やしていこうかなと思えた一冊だった。