Apa itu ViewModelStore dan viewModelStoreOwner?

12

Saya sangat bingung karena api ViewModelProvider baru ini (ViewModelProviders sudah usang)

Seperti halnya perubahan baru, ada juga Konstruktor baru (Kode sumber).

# 1

public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
        this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
                ? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
                : NewInstanceFactory.getInstance());
    }

# 2

public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
        this(owner.getViewModelStore(), factory);
    }

# 3

 public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
        mFactory = factory;
        mViewModelStore = store;
    }

Ketergantungan Gradle:

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"

Jadi Konstruktor ini membutuhkan ViewModelStoredan viewModelStoreOwner.

Dokter:

@param store {@code ViewModelStore} tempat ViewModels akan disimpan.

@param pemilik {@code ViewModelStoreOwner} yang {@link ViewModelStore} akan digunakan untuk mempertahankan {@code ViewModels}


Adakah yang bisa mendefinisikannya dan bagaimana menggunakannya dan apa artinya bagi kami pengembang?


itu ViewModelStoreOwner == aktivitas / fragmen?

Anmol
sumber

Jawaban:

6

Adakah yang bisa mendefinisikannya dan bagaimana menggunakannya dan apa artinya bagi kami pengembang?

A ViewModelStoredapat dianggap sebagai wadah yang menyimpan ViewModels di a HashMap. Di mana nilai keystring dan nilai adalah ViewModel yang disimpan ( ViewModelProvidermenggunakan gabungan dari string_keynama kanonik kelas + ViewModel).

A ViewModelStoreOwnerhanyalah sebuah antarmuka. Setiap kelas yang mengimplementasikan yang getViewModelStore()didefinisikan oleh antarmuka ini menjadi pemilik ViewModelStore. Kelas ini kemudian mempertahankan ViewModelStoredan harus bertanggung jawab untuk mengembalikannya dengan tepat saat diperlukan.

Kita dapat menerapkan versi pemilik kita sendiri dan negara berdasarkan persyaratan.

itu ViewModelStoreOwner == aktivitas / fragmen?

Iya. Berdasarkan kode sumber Android, keduanya Fragment(dari androidx.fragment.app) & ComponentActivity(dari androidx.activity) mengimplementasikan ViewModelStoreOwner. Kelas-kelas ini mempertahankan viewModelStoredan nilai dipulihkan dengan tepat.

Sagar
sumber