ViewModelの整理


概要

  • ライフサイクルを考慮してUI関連データを格納および管理するために設計されたクラス.これにより、画面回転などの構成変更時でもデータを保持できます.
  • システムからUIコントローラを削除または再作成すると、コントローラに格納されている一時的なUI関連データはすべて削除されます.簡単なデータはonSaveInstanceState()を使用して復元できますが、少量のデータにのみ適用されます.
  • 単一クラスですべてのアプリケーションの作業を処理すると、テストだけでなくメンテナンスも困難になります.したがって、UI 컨트롤러 로직에서 뷰 데이터 소유권을 분리하는 방법이 훨씬 쉽고 효율적이다.
  • インプリメンテーション


  • ViewModelオブジェクトは、構成変更中に自動的にアーカイブされるため、次のビューですぐに使用できます.たとえば、ユーザー・リストを確認し、次のサンプル・コードに示すように、ビューではなくView Modelに責任を割り当てます.
    class MyViewModel : ViewModel() {
        private val users: MutableLiveData<List<User>> by lazy {
            MutableLiveData<List<User>>().also {
                loadUsers()
            }
        }
    
        fun getUsers(): LiveData<List<User>> {
            return users
        }
    
        private fun loadUsers() {
            // Do an asynchronous operation to fetch users.
        }
    }
    class MyActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            // Create a ViewModel the first time the system calls an activity's onCreate() method.
            // Re-created activities receive the same MyViewModel instance created by the first activity.
    
            // Use the 'by viewModels()' Kotlin property delegate
            // from the activity-ktx artifact
            val model: MyViewModel by viewModels()
            model.getUsers().observe(this, Observer<List<User>>{ users ->
                // update UI
            })
        }
    }
  • この部分はまだよく分かりません.
    ViewModelオブジェクトは、ビューまたはLifecycleOwnerの特定のインスタンスよりも永続的に設計されています.これらの設計により、ビューとライフサイクルオブジェクトを理解せずに、View Modelのテストを作成しやすくなります.ViewModelオブジェクトにはLifecycleObserver(LiveDataオブジェクトなど)を含めることができます.ただし,ViewModelオブジェクトはLiveDataオブジェクトのように観測可能なライフサイクル変更を観察すべきではない.たとえば、システム・サービスを検索するためにアプリケーション・コンテキストが必要な場合、ViewModelはAndroid View Modelクラスを展開し、ジェネレータにアプリケーションを受信するジェネレータを含めることができます(アプリケーション・クラスはContextを展開します).
  • ライフサイクル

  • ViewModelオブジェクトの範囲は、ViewModelのインポート時にViewModelProviderに渡されるライフサイクルとして指定されます.ViewModelは、指定した範囲のライフサイクルが永続的に完了するまでメモリに保持されます.つまり、アクティビティではアクティビティが終了するまで、計画では計画が分離するまで、アクティビティではアクティビティが終了します.
  • は、アクティビティが回転して終了するまで、アクティビティの様々なライフサイクル状態を示す.また、関連するアクティビティのライフサイクルの横には、ViewModelの全期間と、その特定のグラフ内のアクティビティの状態も表示されます.同じ基本状態は、計画のライフサイクルに適用されます.
  • は、通常、onCreate()が最初に呼び出されたときにViewModelを要求する.ViewModelが最初にリクエストされた瞬間から、イベントが終了し廃棄されるまで、ViewModelは存在しません.
  • 詳細をViewModelで置き換え、coutineを使用...

  • 今はまずMVVMを理解しなければならないので、直接テストと執筆には時間がかかりすぎて、次回に続きます.