# JetpackMVVM **Repository Path**: chinajjj91/JetpackMVVM ## Basic Information - **Project Name**: JetpackMVVM - **Description**: 2020年最新最实用的android-MVVM框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2020-06-01 - **Last Updated**: 2023-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 2020年最新最实用的android-MVVM框架

java版mvp参见:https://github.com/VcStrong/RxRetrofitMVPDemo.git
kotlin版mvp参见:https://github.com/VcStrong/KotlinMVPDemo.git
> 注册的密码规则是数字加字母超过8位即可 > 测试账号:13126965106 密码:111111aa ## 1.mvvm-v1 2020.04.20 这是一个整合架构,所有功能开发都只能在一个module中 ### 1.1 业务功能包含以下: - 登录注册(跳转主页后关闭,已登录用户可直接进入主页); - 仿微信朋友圈,Recyclerview嵌套RecyclerView实现多图布局列表切换(一张横向全屏,二张横向全屏,三张横向全屏,四张分两行且横向全屏); - 发表朋友圈回传值刷新(viewmodel中livedata妙用); - 多图带参数上传; - 首页和设置页分别退出登录(intent的flag使用); ### 1.2 本架构技术功能包含以下: - ViewModel在xml页面变量同一命名; - Adapter中item的xml如果经常复用但model数据不一致的情况,切勿盲目binding设置,切勿单向页面绑定,请在adapter中手动控件赋值,不要xml-binding; - Adapter中复杂控件处理需要大对象,建议灵活使用binding寄存,参见CircleAdapter类 - ObjectBox快速实现对象存取 - LiveData对网络请求数据灵活设置,view层基于观察者模式填充 - viewbinding中onClick,onCheckedChanged等事件使用,其他事件根据Listenter实现方法的名字举一反三 ### 1.3 框架包含以下 - androidx:这个系列的jar包和appcompat.support对立的,参见谷歌官方文档 - lifecycle-viewmodel+livedata+DataBinding: 生命周期管理,完全解耦,方便系统内存管理释放,基于观察者模式实现数据更新等等 - Retrofit2:感谢Square公司 - rxjava2:感谢ReactiveX,突然发现Rxjava已经发布3.0了 - ObjectBox:android上运行速度最快的数据库,基于c/c++开发,native接口 - banner:banner如果不需要就去掉。 - Fresco:感谢FaceBook,另外给大家提个醒, Fresco有自己的内存回收机制,但是这个回收阈值没有设置,请自行百度解决,提示:Fresco eviction哈哈哈 - XRecyclerView - RxPermissions:权限申请比较好用 - Arouter:感谢阿里巴巴技术团队 - BoostMultiDex:感谢头条技术团队抖音多dex加载方案 ## 2.mvvm-v2 质量的提高来自不断地追求 v2版本在v1基础上进行组件化升级,由于对组件和模块的概念有了更深的了解,参考了网上的组件化教程,实践总结利弊之后,决定自己写一套优秀高效率的组件运行gradle: - 公司场景:多模块业务联调,统一运行; - 此demo种组件化打包好处:根据gradle配置动态改变模块的引入,分分钟能解决一个模块或者多个模块打包联调; - 具体方式如下: 1. 项目根目录新建了config.gradle存放系统变量; 2. 项目根目录新建了module.gradle存放业务module中build.gradle公用参数,common和app不建议引入(部分重要配置必须写在这两个module中); 3. 项目根目录build.gradle使用groovy动态改变app(module)对模块的引入; 4. 所有选中的模块可根据自己要求,决定是否需要改变AndroidManifest.xml的引入,仿照open_main模块中的sourceSets; 5. 支持多个Module—Application共存,方便处理推送,IM等组件初始化问题 > 注:请认真查看config.gradle中的变量备注 ## 3.mvvm-v3 追风中。 v3版本绝对让你眼前一新,重新提起兴致,追求适配到4.x,由于ObjectBox框架最低支持4.0.3,所以本项目最低只能支持4.0.3版本机型, 新增功能处处都能体现代码的奇妙: - 重新定义config.gradle中常量:分为SDK_VERSION(不因发布分支改变的常量)和active(跟分支相关的参数)。 这么做出于对项目在不同阶段不同部门的打包的时候,部分参数需要进行调整,例如:推送key,包名,域名,项目名等; 主要目的提升研发-测试-运维运营等部门沟通协作; - 新增今日头条-抖音团队multidex打包,适配4.x平台加载dex问题,详细请参照WDApplication代码; - 拆分请求接口,放到各个相关module中,开发阶段尽量减少多人操作common包。 ### mvvm-v3.1 - 对WDViewModel进行改动,配合WDFragViewModel完成Fragment组件化,你可以仿照open_user模块,完成自己 的Fragment组件开发。 - 组合设计模式(Component),通过对子节点初始化赋值,利用MutableLiveData达到共享数据的目的,建议使用 Message对象,减少代码量,增加功能最大适配性。 > @TODO 新想法(我有时间了在继续开发,这阵子先不忙这一块了,v3版本已经很丰满了):Arouter使用的Path从common包的Constant中拿出来,每个项目单独配置(初步想法是通过插件搞定,难点是每个组件的的常量取出来然后合并)