Android开发Android开发经验谈Android技术知识

Android jetpack - ViewModel 存储和管

2020-03-12  本文已影响0人  Yink_Liu

一、前言

ViewModel 可观察数据存储类属于谷歌在2018推出Android jetpack(外网)其中的软件架构组件中的一个。在谷歌开发者网站有详细介绍ViewModel(外网)。

全文就一句话
ViewModel核心:存储和管理界面相关的数据
理解此文前建议简单阅读Lifecycle,理解生命周期组件

二、ViewModel

谷歌爸爸介绍
ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel类让数据可在发生屏幕旋转等配置更改后继续存在。

ViewModel使用场景
ViewModel的使用主要是独立存储和管理界面相关的数据,把界面数据分离出来用ViewModel来管理。
比如Activity/Fragment要重复的打开关闭,若数据时一些网络请求什么的,不必每次创建都去异步请求,请求一次,ViewModel统一管理就好。

为什么例子中的ViewModel都是管理LiveData
ViewModel管理的数据可以是多种,只不过我们更多的管理LiveData,因为LiveData有观察者模式+生命周期特性,方便数据变化时去改变界面。所以他们形影不离。
因为你的目的就是数据变化了去更改UI,如果不用LiveData,就普通的一个String,你得加个回调监听或者别的方式通知到UI你数据已经变化了,你得判断空,判断context是否还存在,等等。思想上他们是相同的。
三、详细介绍
ViewModel总结来就是下面

3.1、生命周期

ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication());
ViewModelProvider viewModelProvider = new ViewModelProvider(this, factory);
viewModel = viewModelProvider.get(MyViewModel.class);

3.2、Fragment共享数据

我们经常在一个Activity写多个Fragment,他们之间经常切换共享数据。使用ViewModel就很方便。

public class MyViewModel extends ViewModel {
    MutableLiveData<String> title;

    public MutableLiveData<String> getTitle() {
        return title;
    }
}

    public class MasterFragment extends Fragment {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(getActivity().getApplication());
            ViewModelProvider viewModelProvider = new ViewModelProvider(getActivity(), factory);
            viewModel = viewModelProvider.get(MyViewModel.class);
        }
    }

    public class DetailFragment extends Fragment {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(getActivity().getApplication());
            ViewModelProvider viewModelProvider = new ViewModelProvider(getActivity(), factory);
            viewModel = viewModelProvider.get(MyViewModel.class);
        }
    }

3.3、应用场景

四、写在最后

上一篇 下一篇

猜你喜欢

热点阅读