Android MVVM 架构应用实现
以前项目中虽然也使用MVVM架构,但由于整体框架不是我自己搭建的,导致我对于MVVM架构的整体还是很不熟悉,所以这次就自己搭建并实现一次MVVM架构。
MVVM架构使用的组件有ViewModel、LiveData、ViewBinding/DataBinding等,这些组件都是Jetpack库中的组件。在使用ViewModel之前要先建立四个类别的概念:
- ViewModelProcider.Factory:Factory用来生成ViewModel
- ViewModel:持有LiveData,从Repository获取数据,并向View提供数据
- Repository:获取和处理数据,可以从网络、数据库或其他API获取并处理数据
- LiveData:具有生命周期感知能力的可观察的数据存储器,通知View展示数据
下图展示了MVVM架构示意图,以及相关组件在其中的作用。
了解了MVVM的基本架构和其中各个组件的作用,可以开始代码实现了。我做这个项目的初衷是因为最近在整理收集Android常用的开源库,为了更方便的展示所实现的一个应用。本项目使用Bmob直接作为后台数据库,接入Bmob SDK后调用API可以直接获取数据,以此来模拟后台接口。同时本项目使用Koin作为依赖注入的框架,省去初始化ViewModel、Repository、ViewModelProcider.Factory的过程。
先贴上项目目录,需要关注的是高亮显示的文件(使用Koin省去了Factory类的实现):
ViewModel类:
实现HomeViewModel类,需要继承继承自ViewModel(),作为HomeFragment的ViewModel。HomeViewModel类的构造参数是BmobRepository,类中有一个LiveData变量用来承载数据,一个函数getAllRecommendLibrary()获取开源库数据,函数实现是repository在协程中获取云数据库中的数据:
class HomeViewModel(private val repository: BmobRepository) : ViewModel() {var libraryRecommendData = MutableLiveData<MutableList<AndroidLibrary>>()fun getAllRecommendLibrary() {viewModelScope.launch {repository.getAllRecommendLibrary(libraryRecommendData)}} } 复制代码
Repository类:
实现BmobRepository类,作为HomeViewModel的数据提供方。BmobRepository类中有一个挂起函数getAllRecommendLibrary(libraryRecommendData: MutableLiveData)用来获取云数据库中的数据,函数的参数是LiveData,在获取数据后,利用setValue通知View展示数据。
class BmobRepository {/*** 获取Bmob中所有推荐开源项目*/suspend fun getAllRecommendLibrary(libraryRecommendData: MutableLiveData<MutableList<AndroidLibrary>>) {return withContext(Dispatchers.IO) {val bombQuery: BmobQuery<AndroidLibrary> = BmobQuery()bombQuery.findObjects(object : FindListener<AndroidLibrary>() {override fun done(data: MutableList<AndroidLibrary>?, ex: BmobException?) {if (ex == null) {Timber.d("Bmob find success")libraryRecommendData.value = data!!} else {Timber.d("Bmob exception $ex")}}})}} }
Koin初始化:
Koin的初始化分为两步:
定义ViewModel,告诉Kioin从哪里找到ViewModel和Repository并自动生成,这里我选择直接写在BaseApplication中,需要注意的是需要定义在最外层,即和Classt同级:
在Application的onCreate()函数中初始化Koin:
class BaseApplication : Application() {override fun onCreate() {super.onCreate()//初始化BmobBmob.initialize(this, Constant.BMOB_APP_ID)//初始化Timberif (BuildConfig.DEBUG) {Timber.plant(Timber.DebugTree())}//第二步:startKoin {//Android contextandroidContext(this@BaseApplication)//modulesval list = listOf(myModule, repoModel)modules(list)}} } //第一步: //定义一个myModule作为Viewmodel val myModule = module {viewModel { HomeViewModel(get()) } } //定义一个repoModule val repoModel = module {single { BmobRepository() } }
Fragment类实现:
实现HomeFragment类作为视图层,其中分为两步:
变量homeViewModel作为ViewModel获取数据,使用Koin后的初始化方式十分简单
private val homeViewModel: HomeViewModel by viewModel()//懒加载初始化 复制代码
LiveData注册监听ViewModel中的数据改变,并实现获取数据后的操作
private fun initRegister() {//LiveData在视图层中注册监听后,在ViewModel中的数据改变时可以持续收到数据homeViewModel.libraryRecommendData.observe(viewLifecycleOwner, {Timber.d("t $it")(binding.rvAndroidLibrary.adapter as AndroidLibraryAdapter).apply {data = itnotifyDataSetChanged()}})}
ViewModel调用函数通知Repository去查询数据:
override fun onResume() {super.onResume()homeViewModel.getAllRecommendLibrary()}
自此,一个MVVM架构的应用搭建完成,第一次独立的搭建MVVM架构之后,对于MVVM架构的理解加深了不少,对于JetPack库中的组件和其它开源库也有了新的认识,此外MVVM架构还经常和Retrofit、RxJava等开源库配合使用,希望以后有机会可以再进行实践操作!!
最后
分享一份由几位大佬一起收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 ,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料分享出来,希望可以帮助到大家提升进阶。
架构师筑基必备技能
作为系统架构师,必须成为所在开发团队的技术路线指导者;具有很强的系统思维的能力;需要从大量互相冲突的系统方法和工具中区分出哪些是有效的,哪些是无效的。架构师应当是一个成熟的、丰富的、有经验的、有良好教育的、学习快捷、善沟通和决策能力强的人。
知识要点:
- 1、深入理解Java泛型:泛型的作用于意义;通配符与嵌套;泛型的上下边界
- 2、注解深入浅出:注解;元注解;自定义注解;APT;插桩;反射
- 3、并发编程:基础概念;线程之间的共享;线程间的协作;线程池的使用
- 4、数据传输与序列化:Serializabie原理;Parcelable 的原理和使用方法;json
- 5、Java虚拟机原理:垃圾回收;内存分配策略;Dalvik虚拟机
- 6、高效IO:基于字节的 IO 操作;基于字符的 IO 操作;IO 常用类
设计思想解读开源框架
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
知识要点:
- 1、热修复设计
- 2、插件化框架设计
- 3、组件化框架设计
- 4、图片加载框架
- 5、网络访问框架设计
- 6、RXJava响应式编程框架设计
- 7、IOC 架构设计
- 8、Android 架构组件 Jetpack
360°全方位性能调优
在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
启动速度
流畅度
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践
Android框架体系架构
Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。
Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。
本篇知识要点:
- 1、高级UI晋升
- 2、Android内核组件
- 3、大型项目必备IPC
- 4、数据持久与序列化
- 5、Framework内核解析
- NDK模块开发(音视频系列)
NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。
在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。
- 本篇知识要点:
- 1、NDK开发之C/C++入门
- 2、JNI模块开发
- 3、Linux编程
- 4、底层图片处理
- 5、音视频开发
- 6、机器学习
- Flutter学习进阶
2019 年无疑是 Flutter 技术如火如荼发展的一年。
每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。
本篇知识要点:
- 1、Flutter跨平台开发概述
- 2、Windows中Flutter开发环境搭建
- 3、编写你的第一个Flutter APP
- 4、Flutter Dart语言系统入门
微信小程序开发
微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。
本篇知识要点:
- 1、小程序概述及入门
- 2、小程序UI开发
- 3、API操作
- 4、购物商场项目实战
Android相关源码解读
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
以上完整学习笔记pdf全部免费分享,需要的朋友只需要点赞支持一下后,【点击这里直达免费获取方式】
Android MVVM 架构应用实现相关推荐
- Android MVVM架构
1.MVC,MVP,MVVVM 1.1什么是MVVM 1.MVVM,是Model-View-ViewModel的简写,是M-V-VM三部分组成.它本质上就是MVC 的改进 版.MVVM 就是将其中的V ...
- Android MVVM架构设计模式,从DataBinding开始
MVVM在android端已经出了很久了,但是还是比较少使用到,现在写Android架构设计的时候比较多使用的是MVP,以前在用Angularjs和Vue接触过双向数据绑定的使用和思想,所以看到MVV ...
- android mvvm架构-基于Jetpack
2020年最新最实用的android-MVVM框架 https://github.com/VcStrong/JetpackMVVM.git 注册的密码规则是数字加字母超过8位即可 测试账号:13126 ...
- android组件化架构 书,Android MVVM组件化架构方案
MVVMHabitComponent 关于Android的组件化,相信大家并不陌生,网上谈论组件化的文章,多如过江之鲫,然而一篇基于MVVM模式的组件化方案却很少.结合自身的调研和探索,在此分享一篇基 ...
- android mvvm livedata_再谈Android应用架构——Jetpack VS 生命周期
前面我们对MVC.MVP.MVVM进行了详尽的分析,但还有一个问题悬而未决,那就是生命周期.在Android平台上生命周期具有十分重要的意义,因此这也是架构必须考虑的因素之一.生命周期处理不好很容易发 ...
- 《Android构建MVVM》系列(一) 之 MVVM架构快速入门
前言 本文属于<Android构建MVVM>系列开篇,共六个篇章,详见目录树. 该系列文章旨在为Android的开发者入门MVVM架构,掌握其基本开发模式. 辅以讲解Android Arc ...
- android数据流分类,【Android工程之类】1 MVVM架构 - MVVM与单向数据流
前言 这个系列将讲述使用MVVM架构.LiveData.Room.Kodein.Retrofit.EventBus来建立一个统一的.优雅的.可维护的TODO程序,本系列分为多个章节,从0开始一步一步引 ...
- Android的MVVM架构的单Activity应用实践
前言 谈Android架构大家很容易想到MVC.MVP和MVVM. 1.MVC 首先分析一下上面各层之前对应的Android代码,layout.xml里面的xml文件就对应于MVC的view层,里面都 ...
- 一个 Android MVVM 组件化架构框架
模块 app: app壳 工程,是依赖所有组件的壳,该模块不应该包含任何代码,它只作为一个空壳存在,由于项目中使用了EventBusAPT技术,需要索引到各业务组件的对应的APT生成类,所以在 app ...
最新文章
- ArcGIS JS API加载GeoServer发布的WFS服务
- Deep Learning for Chatbots, Part 2 – Implementing a Retrieval-Based Model in Tensorflow
- k8s常用对象图示:Deployment、ReplicaSet、Pod它们的关系
- php 跨域web访问权限,php:跨域 Web程序 - 贪吃蛇学院-专业IT技术平台
- input子系统基础之按键2——input设备应用层编程实践
- c语言音像店程序,音像店管理程序_C 课程设计.pdf
- 均方根误差有没有单位_1千万年仅误差一秒,这台钟直接影响北斗卫星的导航定位精度...
- AM5728通过GPMC接口与FPGA高速数据通信实现
- 把图标变成圆形的html_3组24个CSS3分享图标,可旋转和悬停
- powershell玩转ExcelCSV(一)
- Linux:查看磁盘空间占用情况
- 有关嵌入式、单片机、51单片机、STM32、的一些概念详解
- PASCAL VOC2012数据集介绍与制作自己的数据集
- 恩智浦半导体推出近距离非接触式读卡器IC CLRC663
- Fedora9虚拟机下与windows共享文件
- Markdown的下载与应用
- 在线免费学习java资源推荐
- python修改误差棒的样式_matplotlib可视化番外篇bar()--带误差棒的柱状图
- h5封装去底部_贪婪洞窟H5:也出微信小游戏了!还是原来贪婪的味道
- 宏基因组分析步骤Linux,宏基因组分析专题研讨班
热门文章
- 简单几段python代码_如何用python跑一段鸿蒙最简单代码?
- jdk自带压测工具_FULL GC分析过程分享
- atlas mysql 数据库同步_Atlas实现数据库读写分离
- Java构造函数的使用_java中构造函数的使用方法
- vscode安装本地服务器_如何用本地的VSCode连接极链AI的GPU服务器
- Linux系统介绍(二)文件系统结构
- rpm包安装和卸载,rpm查询,yum工具详解,yum仓库搭建
- 常见的和端口,IP相关的企业面试题
- 当当网首页——JS代码
- 【framework】spring3-mvc实例-信息转换