背后的ViewModel

时间:2018-10-15 09:16:20

标签: android mvvm viewmodel android-jetpack android-architecture-components

我不明白,当重新创建UI控制器时,创建的ViewModel实例如何存活?

换句话说... 乳清这种方法

ViewModelProviders.of(this).get(MyViewModel.class);

重新调用时是否返回先前退出的ViewModel实例?

2 个答案:

答案 0 :(得分:0)

获取(MyViewModel.class)

返回一个现有的ViewModel或在与此相关的范围内创建一个新的ViewModel(通常是一个片段或一个活动)。创建的ViewModel与给定的范围相关联并将被保留      只要范围是活动的(例如,如果它是一项活动,直到它      完成或进程被杀死)

public <T extends ViewModel> T get(@NonNull Class<T> modelClass) {
    String canonicalName = modelClass.getCanonicalName();
    if (canonicalName == null) {
        throw new IllegalArgumentException("Local and anonymous classes can not be ViewModels");
    }
    return get(DEFAULT_KEY + ":" + canonicalName, modelClass);
}

如果我们进一步探索,具有两个参数的 get(String key,Class modelClass)方法将返回视图模型。您可以在该函数中查看视图模型是否存在,否则它将返回,否则将创建一个新视图。

public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) {
        ViewModel viewModel = mViewModelStore.get(key);

        if (modelClass.isInstance(viewModel)) {
            //noinspection unchecked
            return (T) viewModel;
        } else {
            //noinspection StatementWithEmptyBody
            if (viewModel != null) {
                // TODO: log a warning.
            }
        }

        viewModel = mFactory.create(modelClass);
        mViewModelStore.put(key, viewModel);
        //noinspection unchecked
        return (T) viewModel;
    }

Here is the reference

答案 1 :(得分:0)

经过一番搜索,我发现了这个post,它解释了我的确切需求。