Что такое ViewModelStore и viewModelStoreOwner?

12

Я очень смущен из-за этого нового API ViewModelProvider (ViewModelProviders устарела)

Как и с новыми изменениями, появляются и новые Конструкторы (Исходный код).

# 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;
    }

Зависимость Gradle:

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

Так что эти конструктор требуют ViewModelStoreи viewModelStoreOwner.

Doc:

@param store {@code ViewModelStore}, где будут храниться ViewModels.

@param owner {@code ViewModelStoreOwner}, чей {@link ViewModelStore} будет использоваться для сохранения {@code ViewModels}


Может кто-нибудь определить их и как их использовать и что они действительно значат для нас, разработчиков?


такое ViewModelStoreOwner == активность / фрагмент?

Anmol
источник

Ответы:

6

Может кто-нибудь определить их и как их использовать и что они действительно значат для нас, разработчиков?

A ViewModelStoreможет рассматриваться как контейнер, в котором хранятся ViewModels в HashMap. Где keyэто строковое значение, а значение - это сохраняемая модель представления ( ViewModelProviderиспользуется конкатенация string_keyканонического имени класса + ViewModel).

А ViewModelStoreOwnerэто просто интерфейс. Любой класс, который реализует getViewModelStore()определенный этим интерфейсом, становится владельцем ViewModelStore. Этот класс затем поддерживает ViewModelStoreи должен отвечать за его надлежащее восстановление при необходимости.

Мы можем реализовать нашу собственную версию владельца и государства в зависимости от требований.

такое ViewModelStoreOwner == активность / фрагмент?

Да. На основе исходного кода Android оба Fragment(от androidx.fragment.app) и ComponentActivity(от androidx.activity) реализуют ViewModelStoreOwner. Эти классы поддерживают viewModelStoreи значение восстанавливается соответствующим образом.

Сагар
источник