O que é ViewModelStore e viewModelStoreOwner?

12

Estou muito confuso devido a esta nova API do ViewModelProvider (o ViewModelProviders foi descontinuado)

Assim como nas novas mudanças, também existem novos construtores (código-fonte).

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

Dependência Gradle:

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

Portanto, esses construtores exigem ViewModelStoree viewModelStoreOwner.

Doc:

@param store {@code ViewModelStore} onde os ViewModels serão armazenados.

proprietário do @param, um {@code ViewModelStoreOwner} cujo {@link ViewModelStore} será usado para manter {@code ViewModels}


Alguém pode defini-los e como usá-los e o que eles realmente significam para nós, desenvolvedores?


é ViewModelStoreOwner == atividade / fragmento?

Anmol
fonte

Respostas:

6

Alguém pode defini-los e como usá-los e o que eles realmente significam para nós, desenvolvedores?

A ViewModelStorepode ser considerado como um contêiner que armazena os ViewModels em um HashMap. Onde o keyvalor da string é e o valor do ViewModel sendo salvo ( ViewModelProviderusa uma concatenação do string_keynome canônico da classe + ViewModel).

A ViewModelStoreOwneré apenas uma interface. Qualquer classe que implementa o getViewModelStore()definido por essa interface se torna o proprietário ViewModelStore. Essa classe mantém ViewModelStoree deve ser responsável por restaurá-la adequadamente quando necessário.

Podemos implementar nossa própria versão do proprietário e do estado com base no requisito.

é ViewModelStoreOwner == atividade / fragmento?

Sim. Com base no código-fonte do Android, ambos Fragment(de androidx.fragment.app) e ComponentActivity(de androidx.activity) implementam ViewModelStoreOwner. Essas classes mantêm ae o viewModelStorevalor é restaurado adequadamente.

Sagar
fonte