Android进阶班组队大项目笔记 | 青训营笔记

148 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

前言

这是我在青训营发表的第五篇笔记,仅以此来记录我在青训营的学习成长历程。

本篇笔记的格式参考青训营所发布的笔记创作评判标准 & 模版

一.项目简介

做一个极简抖音App,实现两大模块。第一个模块是榜单模块,通过代码实现可以获取榜单基本信息以及历史数据查询;第二个模块是个人中心模块,通过代码实现可以展示授权账号的基本信息以及已发布视频列表。

二.涉及技术&知识点

  • 技术栈

Kotlin+Java+Retrofit+Room+mvvm

  • 架构设计

Q:为什么viewModel层使用liveData而不是Flow?

A:我们评估业务逻辑和接口并没有非常复杂,不需要实现多接口的异步数据流,故没有使用Flow。

Q:为什么使用协程而不是RxJava?

A:协程学习成本较低,比较容易上手,比较适合我们组。

Q:为什么不使用消息总线框架比如LiveDataBus、RxBus、EventBus

A:一是实现起来比较复杂,二是项目目前还用不到,毕竟用了协程,后续有需要会通过协程Channel实现eventBus。

三.实践过程

开发语言:Kolin为主,少部分Java

网络请求:使用retrofit,自定义CallAdapter以及CallResult统一处理网络异常,通过自定义拦截器实现网络请求数据可视化以及实现添加公共参数(headers和body),token更新等功能,使用协程使代码同步化避免回调地狱。

数据库存储:使用room,使用单例模式,封装常用增删改查操作,实现对象转换器。

mvvm框架:

view层:使用Databinding完成数据绑定;使用glide完成图片加载;封装BaseActivity和BaseFragment实现布局、监听器添加、快速view获取等功能;使用协程完成生命周期内的异步编程(lifecycleScope);封装BaseRecyclerViewAdapter实现加载更多等功能。

viewModel层:使用liveData实现单向数据流,实现和view层解耦,使用协程完成异步编程获取数据(viewModelScope),封装BaseViewModel完成Repository初始化。

Repository层:抽象的Model层。包括网络请求和数据库存储,上文已经提及,此处不再赘述。封装运行在IO调度器的协程完成数据准备工作。

四.总结思考

1、目前仍然存在的问题:UI界面不够美观;AppSetting存在内存泄漏的可能性;仍然有http code为200但是存在没有处理的error_code的情况;代码质量仍需提高,需要补全文档以及注释。

2、已经识别出的优化项目:UI界面重构;个别地方context的获取;代码重构提高质量;文档和注释。

3、结构演变的可能性:目前项目结构比较合理完善,在业务逻辑不会非常复杂的情况不会有非常大的变动,因为结构轻耦合,所以可以拓展数据源,也可以改变UI框架。

4、实践过程中的反思与总结:虽然只是个小demo,但是仍然存在共同交流不及时,开发流程不够规范等问题,需要后续解决这些问题。

五.引用参考

笔记创作评判标准 & 模版【内部资料 故不放链接】

大作业:极简抖音-青训营【内部资料 故不放链接】