yumemi-inc / android-training-template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Hiltの導入

Seo-4d696b75 opened this issue · comments

🗡️ Dagger Hiltを利用してDIします

Note

Required(先に完了させましょう)

Next(次に取り組みましょう)

  • 必須課題
    #19
  • 任意課題
    #21

課題内容

  • Hiltのセットアップ
  • YumemiWeatherをViewModelにDIする
  • SavedStateHandleを利用して状態を保持する

依存の注入

アプリでは天気を取得するのにYumemiWeatherを依存として利用しています。しかしアプリが複雑になるとより多くの依存が必要となり、手動で用意するのは大変です。DI (Dependency Injection)を利用すると自動で依存を必要な場所に用意してくれるため、大規模なアプリ開発では必須のツールです。

Tip

ビジネスロジックが集約されているViewModelに依存を注入します。

@HiltViewModel
class YourViewModel @Inject constructor(
    private val weather YumemiWeather,
) : ViewModel() { }

ViewModelで状態を保持する

ViewModel導入の課題で画面を回転させても状態(天気アイコン)を保持できるように修正しました。しかしまだ対応できない場合もあります。

  1. 開発者オプションを有効にする
  2. 「Don't keep activities」オプションをONの状態にする
  3. アプリを起動したらホームボタンなどでバックグラウンドにする
  4. 再度アプリを表示する

通常ではバックグラウンドに移行したアプリも再度表示すれば、直前の状態から引き続きアプリを利用できます。しかしAndroidシステムはメモリ解放など状況に応じてバックグラウンドのActivityを破棄する場合があり、ViewModelも同時に破棄されて状態を保持できません。開発者オプションの「Don't keep activities」はこの状況を意図的に再現するのに利用します。

donot-keep-activity

この課題では「Don't keep activities」オプションがONでもアプリの状態を保持できるように改修しましょう。

Tip

ViewModelでSavedStateHandleを利用する方法があります

動作イメージ

参考資料