目录介绍
1.关于项目App总体架构
1.1项目总体架构
1.1.1 目前项目使用架构
1.1.2 目前常见的架构
1.1.3 MVP架构优势及缺点
1.2.主要的技术要点
1.2.1 布局经常使用及技巧技术
1.2.2 复杂页面展现及数据渲染
1.2.3 自定义控件编写及使用
1.2.4 数据结构及网络数据使用
1.2.5 常见业务流程处理
1.2.6 工具自定义封装使用
1.3 主要开源框架介绍
1.3.1 网络请求框架
1.3.2 注解框架
1.3.3 图片加载框架
1.3.4 api 23之后权限申请
1.3.5 事件总线框架
2 .项目中的代码规范
2.1 关于包名,类名,方法名等命名
2.1.1 包名与分包
2.2.1 日志统开关,平时测试环境,上线关闭
2.3 资源文件string,color,dimen
3.项目中的总结分析
3.1 总结
4.常见问题思索
4.1 业务代码避免耦合度太高
4.2 如何解决问题
4.3 尽可能少写无用代码
5.参考说明
5.1 参考连接
1.关于项目架构
1.1 该项目App总体架构
1.1.1 目前项目使用的架构
准备使用架构是MVP,Rxjava+Retrofit+OkHttp是网络请求框架,MVP是由MVC的基础演化而来,解决了MVC很多的缺点,相对MVC来讲MVP提高解耦更好,业务分层清晰等特色,而以往MVC是把activity、fragment做为的controller和view使用,MVP的model相对于MVC是同样的,而activity和fragment再也不是controller层,而是纯粹的view层,全部相关业务操做所有交由presenter层处理,这样作到一个相对的分离。
1.1.2 市面常见的架构
目前存在常见架构有MVC,MVP,MVVM等,
1.1.3 MVP架构优势及缺点
MVP框架由3部分组成:View负责显示,Presenter负责逻辑处理,Model提供数据。
View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity或者fragment)
Model:负责存储、检索、操纵数据
Presenter:做为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
View interface:须要View实现的接口,View经过View interface与Presenter进行交互
优势:(1)MVP相对于MVC来讲下降了耦合 为何真么说呢? MVC中咱们把业务数据交织在一块儿,也就是activity或fragment中,那么咱们后期须要去修改需求的时候会引起修改难度大改一处而动全身,因此工程量会比较大总结下来就是(下降耦合),
(2)业务模块相对来讲比较清晰,以往咱们很 多业务交织在一块儿,因此比较模糊不太容易分辨咱们具体业务,MVP能很容易看出咱们的业务分层,也为咱们开发后期维护有很大帮助,总结下来就是(模块划分清晰)
(3) 不少时候咱们的业务模块类似,那么这个时候咱们是否是想到一点就是代码复用。少写一部分代码能够提升开发效率,然而MVC就解耦性比较差,就大大减小代码复用,开发的灵活性比较差,总结就是(代码复用及灵活性高)
这些呢是我的对于MVP的一些观点固然还有其余的,这几点相对来讲比较突出因此大家也能够继续探索。
缺点:(1)那么说了这么多优势咱们来看看缺点,咱们Persenter和View交互咱们须要经过接口实现,那么各个业务不一样会形成接口过多,加上咱们的Model 那么代码中会相对比较繁琐,这样会使项目体积变大,后期也会有麻烦,总结下来就是(接口多项目体积变大)。
(2) View和Persenter 会频繁的交互那么若是咱们的View发生变化时相应Persenter也要作出改变(交互频繁)
1.2 主要的技术要点
1.2.1 布局经常使用及技巧技术
布局中主要的一点就是尽可能的层级嵌套不要过于复杂,由于渲染时一层一层往下渲染因此层级过于复杂的话那么耗时相对比较长,根据设计图的布局选择相对比较合适的布局方式,依然可使用android最新的约束布局实现一个层级布局,这当中会涉及到约束布局使用,包括居中,向上,下,左,右,平分布局等,具体能够参考连接地址:
study.163.com/course/intr…
1.2.2 复杂页面展现及数据渲染
对于复杂页面,咱们选择是自带控件RecyclerVIew 支持扩展性强,功能强大 ,因此咱们能够用它的多类型扩展特性完成咱们的复杂布局,同时一个控件展现渲染也为后期业务变化修改提供便利性,具体能够参考连接地址:
study.163.com/course/intr…
1.2.3 自定义控件编写及使用
一般项目中控件不能知足咱们平时开发,那么这时候咱们须要自定义一些控件来知足咱们开发,自定义相对比较复杂,要求掌握知识比较全面一些,咱们能够根据本身的需求来定义控件
1.2.4 数据结构及网络数据使用
1.2.5 常见业务流程处理
项目的最终目的都是咱们为了实现咱们的业务,项目中要根据产品提供的文档来对业务作一些具体的操做,我在项目作了企业级的项目业务处理,虽然不是同一个项目可是万变不离其中
1.2.6 工具自定义封装使用
对于项目中咱们须要用到一些方法,那么若是不少地方都用到那么写一次,这样会代码会比较繁琐, 能够把这些方法写成咱们公用类静态方法以提供给其余地方调用,好比咱们的时间格式化,获取手机参数,转化单位,获取屏幕宽度,高度,像素密度等,具体能够参考连接地址:
study.163.com/course/intr…
1.3 主要开源框架介绍
1.3.1 网络请求框架
Retrofit: 底层基于OkHttp 实现,Retrofit 负责请求的数据和请求的结果,使用接口的方式呈现,OkHttp 负责请求的过 程,RxJava 负责异步,各类线程之间的切换
OkHttp: 也是Square 开源的网络请求库
RxJava:RxJava 一个在 Java VM 上使 用可观测的序列来组成异步的、基于事件的程序的库,总之就是让异步操做变得很是简单。
RxJava + Retrofit + okHttp 已成为当前Android 网络请求教优的选择。
1.3.2 注解框架
目前常见的注解框架:
XUtils:xutils是经过反射来实现的,跟Butterknife的是它须要手动实现注解
AndroidAnnotations:该框架的原理跟Butterknife同样
ButterKnife: 自动生成注解与类属性,Butterknife目前支持的注解有: View绑定,资源绑定,事件绑定。
1.3.3 图片加载框架
ImageLoader:异步加载本地及网络图片,同时实现缓存
Picasso:不只实现了异步加载图片,仍是决解了图片加载的一些问题,错位,压缩,自带二级缓存等
Glide:Glide具备高效 获取、解码和展现视频剧照、图片、动画等功能。
1.3.4 api 23之后权限申请
权限管理,直接使用谷歌原生权限框架
1.3.5 事件总线框架
activity,fragment,service等不一样组件直接通讯一直是个头疼的问题,那么咱们使用事件总线来进行通讯
EventBus:EventBus逻辑很是的清晰,代码之间高度解耦,在进行组件、页面间通讯的时候,是很好的选择,
2 .项目中的代码规范
2.1 关于包名,类名,方法名等命名规则
2.1.1 包名与分包规则
包名:com.xxxx.project 例如:com.ousang.tinder 其中xxxx是我们企业名称,最后是项目名称
分包以以下图:
2.2.1 环境统一开关,平时测试环境,上线关闭
在咱们的管理类中设置一个方法控制咱们的环境,平时测试时使用测试环境,上线时更改成上线环境
2.3 资源文件string,color,dimen
(1)对于项目中的字符串咱们统一写入到清单文件string中以规范化,后期更改只需找到清单文件更改便可
(2)由于设计颜色相对会比较繁多,因此项目中的颜色值咱们统一写入到清单文件color中以规范化,后期更改只需找到清单文件更改便可
(3)一样尺寸咱们统一写入到清单文件dimen中以规范化,后期更改只需找到清单文件更改便可
3.项目中的总结分析
3.1 总结及收获
(1)项目中存在问题时要多思考问题缘由,由于这样才能收获,不要盲目搜索,带着问题关键去寻找。
(2)完结项目后要回头去看代码是否能够更完美,尝试优化。
(3)和他人分享,每一个人的想法有多是一种收获
4.常见问题思索
4.1 业务代码避免耦合度太高
平时开发时尽可能避免项目的耦合度太高,Persenter与View尽可能作到耦合低, 避免往后的维护修改麻烦增长工做量,
4.2 如何解决问题
开发时会遇到不少的问题,那么咱们能够借助搜索引擎的寻找答案,可是你要能看问题的核心,报错时咱们须要看咱们日志而后找到问题所在倒推问题发生源,若是是业务出错时回头去仔细查看文档分析,检查代码而后调试断点查处问题,总之就是不要慌,镇定。
4.3 尽可能少写无用代码
咱们布局,业务代码,工具,能抽取出来成为一个公用的时,就抽取,就公用,由于这部分相同代码实际上没有意义,到还繁琐,浪费时间或者均可以放进一个公用的包内。
5.参考说明
5.1 参考连接
Android App的设计架构:MVC,MVP,MVVM与架构经验谈:
浅谈 MVP in Android:
刘望舒大神,Android架构(一)MVP全解析: