yumemi-inc / android-training-template

Apache License 2.0
13 stars 2 forks source link

Hiltの導入 #18

Open Seo-4d696b75 opened 1 year ago

Seo-4d696b75 commented 1 year ago

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

[!NOTE]

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

  • 17

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

  • 必須課題

    19

  • 任意課題

    21

課題内容

依存の注入

アプリでは天気を取得するのに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を利用する方法があります

動作イメージ

参考資料