仿开眼app—Kotlin+MVVM+DataBinding

时间:2024-04-09 18:51:50

1、前言

仿开眼app的练习项目,主要为了练习MVVM + DataBinding + LiveData + 组件化 + kotlin等的使用

2、截图

仿开眼app—Kotlin+MVVM+DataBinding 仿开眼app—Kotlin+MVVM+DataBinding 仿开眼app—Kotlin+MVVM+DataBinding
仿开眼app—Kotlin+MVVM+DataBinding 仿开眼app—Kotlin+MVVM+DataBinding 仿开眼app—Kotlin+MVVM+DataBinding
仿开眼app—Kotlin+MVVM+DataBinding 仿开眼app—Kotlin+MVVM+DataBinding 仿开眼app—Kotlin+MVVM+DataBinding

3、功能

  • 首页、社区、通知内容展示
  • 视频详情页、视频播放、评论展示
  • 视频播放封装+全屏
  • 图片详情页
  • 网页加载
  • 内容搜索
  • 其他…

4、实现

  • MVVM + DataBinding + LiveData
  • kotlin作为主要开发语言
  • 组件化开发,新建launch模块单独调试各个module,防止切换app/module时反复进行同步
  • Retrofit + 协程 + flow完成网络请求
  • ViewPager2实现Banner

5、总结

1、MVVM:MVVM基于观察者模式,ViewModel层不直接持有View层的引用,而是通过LiveData把数据通知到View层,LiveData +Lifecycle解决了内存泄漏问题;把数据放到ViewModel层,在Activity配置发送变化时,如屏幕旋转时可以不用重新请求数据就能做到数据恢复;相比MVP来说,PV层需要互相持有,所以需要自己处理生命周期。MVP基于接口回调,需要先写接口,再写实现类,而MVVM则不用,少写很多代码。

2、kotlin:kotlin相对于java来说,可以少写很多代码。扩展函数、高阶函数、协程、flow等大量语法糖很方便。协程可以以同步的方式编写异步代码,减少了大量的回调,上手难度也不高。

3、DataBindng:对于DataBinding很多人褒贬不一,实际用过之后发现几个缺点:1. 布局无法重用,因为要在xml布局中写代码 2. 出现错误不好调试,比如text = "@{data.count}"假设这个count是Int类型,不过写多了之后大部分可以避免。但是DataBinding可以少写很多代码,通过BindingAdapter还可以自定义自己的逻辑,所以还是推荐一试。

4、组价化:组件化的好处是各个组件不直接依赖,因此可以做到同时开发、单独调试。但是需要处理好公共组件的问题,一开始就要尽可能的考虑哪些部分是公共的,不然到后面还需要拆分。不过我觉得架构的演化本就是拆拆合合的过程。

github地址:https://github.com/drkingwater/eyepetizer-kotlin

如果觉得有帮助,麻烦帮点个star谢谢