Android MVVM

本文介绍了Android MVVM模式,详细阐述了MVVM模式的组成部分及其职责,包括ViewModel、Model和View的角色。讨论了Android MVVM的具体实现,强调了ViewModel的生命周期特性以及LiveData在数据绑定中的作用。同时,通过一个简单的Demo展示了如何在实际开发中应用MVVM,包括Repository、ApiService和DataBinding的使用。最后,提供了Dome的GitHub地址和相关参考资料。
摘要由CSDN通过智能技术生成

1、MVVM 模式简介

MVVM 软件设计模式由微软在2005年提出,下图及介绍总结自微软The MVVM PatternImplementing the MVVM Pattern。上面两篇文章中和微软自家产品关联性很强,并很适用于Android,这里仅仅是介绍MVVM模式的概念及MVVM模式中各模块所承担的职责。

  • View
    就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI),决定如何呈现数据
  • ViewModel
    封装了View的显示逻辑和数据。不直接引用View。ViewModel实现来自View的命令(如点击事件)、处理(转换/聚合)View所需绑定的数据、通知View数据或状态的改变。ViewModel和数据和状态提供给View,但View决定了如何呈现。
  • Model
    封装了业务逻辑和数据(业务逻辑是指所有有关数据检索与处理的程序逻辑),并且保证数据的一致性和有效性。为了最大化重用机会,Model不应包含任何用于特定ViewModel的处理逻辑。
  • Binder 绑定器
    数据绑定技术的实现在MVVM中是必须的。Binder确保ViewModel中数据发生变化时能够及时通知View,使View呈现最新的数据。

2 、Android MVVM 模式

MVVM在不同的平台实现方式是有一定差异性的。在Google IO 2017 ,Google发布了一个官方应用架构库Architecture Components,这个架构库便是Google对Android应用架构的建议,也被称之为Android官方应用架构指南Android Architecture Components在Google中国开发者网站中能找到。和Data Binding Library一样官方还没翻译为中文

下图是Architecture的应用架构图。结合Android程序特点,整体上与微软的MVVM类似,但是做了更细致的模块划分。

来自Google开发者网站

  • View
    显而易见 Activity/Fragment 便是MVVM中的View,当收到ViewModel传递来的数据时,Activity/Fragment负责将数据以你喜欢的方式显示出来。实际是View成还包括ViewDataBinding(根据xml自动生成),上面中并没有体现。

  • ViewModel
    ViewModel作为Activity/Fragment与其他组件的连接器。负责转换和聚合Model中返回的数据,使这些数据易于显示,并把这些数据改变及时的通知给Activity/Fragment。
    ViewModel是具有生命周期意识的,当Activity/Fragment销毁时ViewModel的onClear方法会被回调,你可以在这里做一些清理工作。
    LiveData是具有生命周期意识的一个可观察的的数据持有者,ViewModel中的数据由LiveData持有,并且只有当Activity/Fragment处于活动时才会通知UI数据的改变,避免无用的刷新UI;

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

  • Binder 绑定器
    上图中并没有标出绑定器在哪里,其实在任何MVVM的实现中,数据绑定技术都是必须的。而上图仅仅是应用架构图。
    Android中的数据绑定技术由 DataBindingLiveData共同实现。当Activity/Fragment接收到来自ViewModel中的新数据时(由LiveData自动通知数据的改变),将这些数据通过DataBinding绑定到ViewDataBinding中,UI将会自动刷新,而不用书写类似setText的方法。

3、Android MVVM 实战

上面都是一些理论,下面开始的按照Android Architecture Components写一个的MVVM Demo。这个Dome会加入DataBindingViewModelLiveDataretrofit并且使用java8。不准备添加Room(数据库)Dagger2(依赖注入)

现在我们来写这个Dome

我们将在这个Dome里面通过Github用户的用户名,来获取具体的用户信息详情。其实Github返回很多,我们这里为了方便只显示用昵称,头像,公开库数量,最后修改时间。

效果图:
这里写图片描述

项目结构:

依赖:

首先,Android Studio 3.0 是必须的。然后添加依赖..

android {
    ...
    //添加DataBinding支持
    dataBinding {
        enabled = true
    }
    //添加java8支持
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    ...
    //LiveData,ViewModel
    implementation "android.arch.lifecycle:extensions:1.1.0"
    implementation "android.arch.lifecycle:common-java8:1.1.0"
    //网络请求
    implementation "com.squareup.retrofit2:retrofit:2.3.0"
    implementation "co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值