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