Open Seo-4d696b75 opened 1 year ago
🗡️ Dagger Hiltを利用してDIします
[!NOTE] Required(先に完了させましょう) 17 Next(次に取り組みましょう) 必須課題 19 任意課題 21
[!NOTE]
YumemiWeather
アプリでは天気を取得するのにYumemiWeatherを依存として利用しています。しかしアプリが複雑になるとより多くの依存が必要となり、手動で用意するのは大変です。DI (Dependency Injection)を利用すると自動で依存を必要な場所に用意してくれるため、大規模なアプリ開発では必須のツールです。
[!TIP] ビジネスロジックが集約されているViewModelに依存を注入します。
@HiltViewModel class YourViewModel @Inject constructor( private val weather YumemiWeather, ) : ViewModel() { }
ViewModel導入の課題で画面を回転させても状態(天気アイコン)を保持できるように修正しました。しかしまだ対応できない場合もあります。
通常ではバックグラウンドに移行したアプリも再度表示すれば、直前の状態から引き続きアプリを利用できます。しかしAndroidシステムはメモリ解放など状況に応じてバックグラウンドのActivityを破棄する場合があり、ViewModelも同時に破棄されて状態を保持できません。開発者オプションの「Don't keep activities」はこの状況を意図的に再現するのに利用します。
この課題では「Don't keep activities」オプションがONでもアプリの状態を保持できるように改修しましょう。
[!TIP] ViewModelでSavedStateHandleを利用する方法があります
🗡️ Dagger Hiltを利用してDIします
課題内容
YumemiWeather
をViewModelにDIする依存の注入
アプリでは天気を取得するのに
YumemiWeather
を依存として利用しています。しかしアプリが複雑になるとより多くの依存が必要となり、手動で用意するのは大変です。DI (Dependency Injection)を利用すると自動で依存を必要な場所に用意してくれるため、大規模なアプリ開発では必須のツールです。ViewModelで状態を保持する
ViewModel導入の課題で画面を回転させても状態(天気アイコン)を保持できるように修正しました。しかしまだ対応できない場合もあります。
通常ではバックグラウンドに移行したアプリも再度表示すれば、直前の状態から引き続きアプリを利用できます。しかしAndroidシステムはメモリ解放など状況に応じてバックグラウンドのActivityを破棄する場合があり、ViewModelも同時に破棄されて状態を保持できません。開発者オプションの「Don't keep activities」はこの状況を意図的に再現するのに利用します。
この課題では「Don't keep activities」オプションがONでもアプリの状態を保持できるように改修しましょう。
動作イメージ
参考資料