0°

Android官方MVVM框架实现组件化之整体结构(一)

内容预览:
  • 3.2 ARouter串联各个模块 使用ARouter来跳转Activity和获取Fragment,记...~
  • 3.4 最后预告: 后面会有一些列介绍在MVVM组件化过程中使用ARouter来跳...~
  • 推荐阅读 知识星球这里聚集了业界内的大牛,值得各位大牛的加入! 看完...~

始发于微信公众号: 程序员小乐

分享编程技能、互联网技术、生活感悟、打造干货分享平台,将总结的技术、心得、经验分享给大家,这里不只限于技术!值得你去关注,点击上方 蓝字 快速关注。本号支持 投稿



  前言



Android官方MVVM框架实现组件化之整体结构(一)

0-演示项目MVVM组件化架构图


  一、google官方MVVM框架讲解



我前面对比了MVC和MVP《两张图看懂Android开发中MVC与MVP的区别》(http://blog.csdn.net/u010072711/article/details/77132403),可以相对于MVC我们的MVP是有多优越,但是Android开发现在已经开始流行了MVVM,前不久google官方发布了MVVM的正式库。官方的正式MVVM库主要包括下面四个:


Android官方MVVM框架实现组件化之整体结构(一)

1-正式MVVM库组件


其中只有ViewModel是MVVM结构中的一个组件,其他的三个都是辅助性质的。


lifecycles 就是处理UI界面的生命周期,在26版本以后的Support库中,AppCompatActivity和SupportActivity中都实现了LifecycleOwner,内部已经对UI界面的生命周期做了处理了。


LiveData是一个抽象类,我们可以存放UI页面需要的数据,就是把数据包装在LiveData中了,我们可以观测LiveData中的数据变化,但是LiveData是跟UI的生命周期关联的,当UI页面销毁了,LiveData的数据变化回调是不会执行的。

Room 就是一个sqlite数据持久化库,我们也可以使用别的ORM库。


  二、MVVM架构优势



《两张图看懂Android开发中MVC与MVP的区别》(http://blog.csdn.net/u010072711/article/details/77132403)前面两张图真是了MVC和MVP的区别,我这里也来一张图看看MVVM:

Android官方MVVM框架实现组件化之整体结构(一)

2-MVVM架构


看上图Model和View是不会发生关系的,ViewModel是把View和Model关联起来的加工厂:

Android官方MVVM框架实现组件化之整体结构(一)

3-ViewModel工厂

MVVM优势总结:


1、View和Model双向绑定,一方的改变都会影响另一方,开发者不用再去手动修改UI的数据。额,互相自动的。


2、不需要findViewById也不需要butterknife,不需要拿到具体的View去设置数据绑定监听器等等,这些都可以用DataBinding完成。是不是很舒服?


3、View和Model的双向绑定是支持生命周期检测的,不会担心页面销毁了还有回调发生,这个由lifeCycle完成。


4、不会像MVC一样导致Activity中代码量巨大,也不会像MVP一样出现大量的View和Presenter接口。项目结构更加低耦合。


5、更低的耦合把各个模块分开开发,分开测试,可以分给不同的开发人员来完成。


  三、MVVM组件化示例项目架构分析



下图是项目模块和工程之间的依赖关系:


Android官方MVVM框架实现组件化之整体结构(一)

4-MVVM组件化示例项目架构图


下图是工程Android Studio中的目录结构:


Android官方MVVM框架实现组件化之整体结构(一)

5-工程目录结构


3.1 各模块和彼此之间的关系解释:


  • lib_opensource :第三方build.gradle依赖,本项目主要有support、lifecycle、room、fresco、retrofit、okhttp、RxJava、ARouter这些。

  • lib_coremodel: 存放MVVM中的Model和ViewModel两个模块,就是数据的处理和数据与UI页面的绑定。依赖lib_opensource库。

  • lib_common : 公共库,主要有各种base,各种ui组件,自定义组件,公用的Activity、公用的Fragment,和公用的utils等等。依赖lib_coremodel库。

  • module_girls : 妹子功能模块,可以在library和application之间切换,自己可以是一个app也可以成为别的app的一个组件模块。组件化编译时为app,反之为module。

  • module_news : 新闻功能模块,可以在library和application之间切换,自己可以是一个app也可以成为别的app的一个组件模块。组件化编译时为app,反之为module。

  • app_universal : 定制版本的app,组件化编译时 module_girls和module_news为app,所以不能把这两个作为module加进来编译,所以组件化编译时app_universal要依赖lib_common库,反之就可以把 module_girls和module_news作为module加进来编译。

  • app_specific : 定制版本的app,组件化编译时 module_girls和module_news为app,所以不能把这两个作为module加进来编译,所以组件化编译时app_specific要依赖lib_common库,反之就可以把 module_girls和module_news作为module加进来编译。


    3.2 ARouter串联各个模块


    使用ARouter来跳转Activity和获取Fragment,记得看之前别人的组件化结构文章,一直都在纠结Fragment的获取问题,我想说的是有了ARouter来获取Fragment不是超级简单么?


    ARouter典型应用

    • 从外部URL映射到内部页面,以及参数传递与解析

    • 跨模块页面跳转,模块间解耦

    • 拦截跳转过程,处理登陆、埋点等逻辑

    • 跨模块API调用,通过控制反转来做组件解耦


      3.3 组件化编译和非组件化编译切换


      我们在工程根目录下的gradle.properties文件中加入一个Boolean类型的变量,通过修改这个变量来识别编译模式:


      # 每次更改“isModule”的值后,需要点击 "Sync Project" 按钮 # isModule是“集成开发模式”和“组件开发模式”的切换开关 isModule=false

      然后在 module_girls和module_news中的build.gradle文件中支持切换:


      Android官方MVVM框架实现组件化之整体结构(一)

      Android官方MVVM框架实现组件化之整体结构(一)

      Android官方MVVM框架实现组件化之整体结构(一)


      上面看到了组件化和非组件化编译会有不用的AndroidManifest文件,组件化时需要debug文件夹下面的application类,非组件化时排除此文件夹。

      Android官方MVVM框架实现组件化之整体结构(一)

      6-组件化非组件化编译切换


      1、module下的AndroidManifest文件是组件化app编译时的,写了MAIN入口Activity


      2、dubug下是组件化app编译时的Application类,初始化作为一个app运行时需要的资源等等。在非组件化编译在build.gradle文件中排除debug文件夹的所以东西。


      3.4 最后预告:


      后面会有一些列介绍在MVVM组件化过程中使用ARouter来跳转Activity和获取Fragment、DataBinding实现数据和UI的互相绑定、Rxjava2和Retrofit2动态数据获取,和AndroidViewModel的封装。


      下面贴贴一个lib_coremodel库中我封装的AndroidViewModel,用泛型来确定数据类型,并且是动态URL获取数据:


      Android官方MVVM框架实现组件化之整体结构(一)

      Android官方MVVM框架实现组件化之整体结构(一)

      Android官方MVVM框架实现组件化之整体结构(一)

      Android官方MVVM框架实现组件化之整体结构(一)


      Android官方MVVM框架实现组件化之整体结构(一)


      如何您想进技术群和大牛们交流,关注公众号在后台回复 “加群”,或者 “学习” 即可

      作者:Dawish_大D

      链接:http://www.jianshu.com/p/c0988e7f31fd

      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

      如果您觉得不错,请别忘了分享到您的朋友圈让更多的人看到!! 您的举手之劳,就是对我最好的支持,非常感谢!

      每日英文


      You’ll never realize how strong you are until you have no other choice but to be strong.   

      你永远都不会知道自己到底有多坚强,直到有一天你除了坚强别无选择。


      乐乐有话说


      珍惜那些朋友圈里不聊天,却天天给你点赞的人,不是因为你的文章写的多好,只是因为这个世界上还有一种感情,叫关注。


      Android官方MVVM框架实现组件化之整体结构(一)


      推荐阅读




      知识星球
      这里聚集了业界内的大牛,值得各位大牛的加入!

      Android官方MVVM框架实现组件化之整体结构(一) 

      看完本文有收获?请转发分享给更多人
      关注「杨守乐」,提升编程技能

      【QQ技术群】279126311 []
      【QQ技术群】484572225 [未]

      以上就是:Android官方MVVM框架实现组件化之整体结构(一) 的全部内容。

      本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
      Email:[email protected]


      0 条回复 A 作者 M 管理员
        所有的伟大,都源于一个勇敢的开始!
      欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论