博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVVMArms - MVVM 与 Android Architecture Components 的最佳实战
阅读量:6177 次
发布时间:2019-06-21

本文共 2347 字,大约阅读时间需要 7 分钟。

首先感谢 开源的 ,学到了很多知识,也方便了公司项目的开发!

在 Google I/O 2017 大会上,Google 推出了新的组件库 - Android Architecture Components,官方文档做的很详细,分别介绍了各个组件的应用场景和使用方式,这无疑会推进 Android MVVM 模式的发展。关于 MVVM 这里不做过多介绍,如果有需要可以自行搜索。

正文

Android Architecture Components 简介

先来看一下 Android Architecture Components 包含哪些内容:

加上之前推出的 Data Binding Library

如果想要引用 Components,可参考以下链接:

注意:如果你无法访问 Google Maven 库,可以使用以下地址代替:

maven { url "" }

这里需要特别说明的是,ViewModel 相当于 MVVM 的 VM 层,它和 View 是通过 Data Binding 双向绑定的,ViewModel 不再持有 View 的引用,而是存储UI相关的数据;而且 ViewModel 是生命周期感知的,当创建它的 Activity/Fragment 销毁时,ViewModel 会自动销毁。

MVVMArms 框架图

这里引用 架构图,参考 MVPArms 做了一些修改。

MVVMArms _Architecture

整个框架采用 Dagger 进行依赖注入,并使用了最新的 Dagger.Android,组织好 ModuleComponents,框架会自动注入。具体可参考 demo。

MVVM 组件的封装

Model

框架中,数据的获取是通过 Model 层获取的,在 Model 中持有一个数据管理类对象- RepositoryManager(实现了 IRepositoryManager 接口),分别可以通过 Retrofit

获取网络数据,通过 Room 获取 SQLite 数据库中的持久化数据。具体实现可查看源码链接:

Room 的使用需要在 gradle 中添加:

android {...    //Room    javaCompileOptions {        annotationProcessorOptions {            arguments = ["room.schemaLocation":                                 "$projectDir/schemas".toString()]        }    }}复制代码

ViewModel

ViewModel 是整个框架比较新颖和重要的部分,BaseViewModel 继承于 Components 中的 AndroidViewModel,并实现了 LifecycleObserver 接口;它持有 Model 的引用,主要的业务逻辑都是在 ViewModel 中实现的;ViewModel 中UI相关的数据通过 LiveData 包装,使得当数据变化时,自动反映到UI上,实现了数据UI。在 xml 布局文件中,通过 Data Binding 绑定对应的 ViewModel。 BaseViewModel 源码如下:

View

框架封装了 ArmsActivityArmsFragment,它们都实现了 Components 中的 LifecycleRegistryOwner 接口来处理生命周期。上面提到在 xml 布局中绑定 ViewModel,而 ViewModel 的创建和生命周期绑定是在 Activity/Fragment 中进行的,具体是通过 Components 中提供的 ViewModelProviders 类完成的。下面是创建 ViewModel 的实例:

//创建ViewModelmViewModel = ViewModelProviders.of(this, mViewModelFactory).get(WeatherViewModel.class);复制代码
  • mViewModel 是通过泛型封装在 ArmsActivityArmsFragment 中的;
  • 同样,mViewModelFactory 是通过 Dagger 将 ViewModelFactory 注入在 ArmsActivityArmsFragment 中的。
  • ViewModelProviders.of() 是一个重载的方法,通过传入的第一个参数,限定该 ViewModel 与 哪个 Activity/Fragment 进行生命周期绑定。

创建好了 ViewModel 后,在 ArmsActivityArmsFragment 设置 ViewModel 监听 Lifecyle 的回调:

if (mViewModel != null)    getLifecycle().addObserver((LifecycleObserver) mViewModel);复制代码

同时,需要将上述提到的 xml 中绑定的 ViewModel 进行设置,这就很简单了,示例代码如下:

mBinding.setViewModel(mViewModel);复制代码

源码链接:

Github

更多细节请移步 Github,写了一个简单的 demo,欢迎 star、fork,issue、pr,希望可以一起交流:

参考

联系

我是 xiaobailong24,您可以通过以下平台找到我:

  • Github:
  • 简书:
  • 掘金:

转载地址:http://aizda.baihongyu.com/

你可能感兴趣的文章
Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
查看>>
ubuntu老旧软件源
查看>>
Linux服务器配置——SAMBA
查看>>
我的WP7应用
查看>>
js打开连接 _无需整理
查看>>
我的友情链接
查看>>
Nginx配置:负载均衡和SSL配置
查看>>
复选框checkbox全选与否js
查看>>
Linux下配置IP的脚本
查看>>
poj1218——THE DRUNK JAILER
查看>>
WannaCry只是个开始?信息时代你急需的安全书单
查看>>
jquery 多控件添加相同事件
查看>>
android6.0指纹开发
查看>>
django分页技术paginator
查看>>
存储过程 字段名为变量
查看>>
Vmware 如何开启CPU虚拟化
查看>>
智能机与功能机——发展中国家的测试
查看>>
ASP.NET MD5加密
查看>>
Cannot open precompiled header file:'Debug/password.pch' No such file or directory
查看>>
Parcelable的使用——通过Intent传递对象
查看>>