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

Mvvm开发模式解读

2020-08-03  本文已影响0人  奔跑吧李博
Mvvm模式架构图
MVVM 模式与Mvp:

Mvvm将Mvp的Presenter 改名为 ViewModel,基本上与 MVP 模式一致。但是它省去了MVP模式中编写大量接口的麻烦。它采用双向绑定(data-binding),View的变动,自动反映在 ViewModel,Viewmodel改变,也自动在view中刷新,降低了和View的耦合度。

View层(Activity/Fragment)

显而易见,Activity/Fragment 便是MVVM中的View,当收到ViewModel传递来的数据时,Activity/Fragment负责将数据以你喜欢的方式显示出来。

ViewModel层

Model

Repository及其下方就是Model了。Repository负责提取和处理数据。数据可以来自本地数据库(Room),也可以来自网络,这些数据统一有Repository处理,对应隐藏数据来源及获取方式。

View与ViewModel如何实现自动刷新数据?

View层与ViewModel层的通信是通过LiveData这个架构组件实现的,不同于MVP架构中通过接口来通信。
Android中的数据绑定技术由 DataBinding和LiveData共同实现。当Activity/Fragment接收到来自ViewModel中的新数据时,由LiveData自动通知数据的改变,将这些数据通过DataBinding绑定到ViewDataBinding中,UI将会自动刷新,而不用书写类似setText的方法。随即DataBinding和LiveData闪亮登场。

DataBinding

Databing是Google发布的一个用来支持MVVM模式的框架,它的主要作用是用来降低布局和逻辑的耦合度。省去了各个findViewById,当viewmodel层数据更新,UI也会随即更新。
DataBinding可以做数据绑定,事件绑定,相应类的import,可以引入Java类或自定义类。

LiveData与MutableLiveData

LiveData是具有生命周期意识的一个可观察的的数据持有者,ViewModel中的数据由LiveData持有,并且只有当Activity/Fragment处于活动时才会通知UI数据的改变,避免无用的刷新UI;
它提供一个泛型来包装数据,它允许应用中的组建来观察LiveData中对象的变化。更进一步来讲,LiveData将数据的生产者与数据的消费者进行了分离。

LiveData特点:

1.首先LiveData其实与数据实体类是一样的东西,它负责暂存数据.
2.其次LiveData其实也是一个观察者模式的数据实体类,它可以跟它注册的观察者回调数据是否已经更新.
3.LiveData还能知晓它绑定的Activity或者Fragment的生命周期,它只会给前台活动的activity回调,避免组件销毁后发生意想不到的崩溃情况。

举例LiveData的一个用法,你可以封装一个自己的BaseLivedata类,用于统一通知网络请求的成功、失败、数据为空等状态的回调。

LiveData与MutableLiveData区别

1.MutableLiveData的父类是LiveData。

2.LiveData在实体类里可以通知指定某个字段的数据更新。MutableLiveData则是完全是整个实体类或者数据类型变化后才通知,不会细节到某个字段。

简单例子实现livedata的局部更新通知:

public class UserBean extends LiveData<UserBean> {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        postValue(this);
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
        postValue(this);
    }
}
        viewModel.getUserBean().setName("你的名字");

        viewModel.getUserBean().observe(this, new Observer<UserBean>() {
            @Override
            public void onChanged(UserBean userBean) {
                Log.i("TAG", "数据有更新");
            }
        });
MutableLiveData类的方法:

setValue() :必须从主线程调用此方法,设置值给它的观察者
postValue():此方法可以在其他线程中调用
removeObserver(): 移除指定观察者
removeObservers():移除所有观察者
observeForever():设置永久观察者

Lifecycle

Lifecycle是Google官方提供的方便管理生命周期事件的方式,可以更方便的监听生命周期变化事件,它以注解的方式作用在方法上,当生命周期方法调用时,它也会被跟随调用。

Lifecycle详情见这里

上一篇下一篇

猜你喜欢

热点阅读