Android开发之深度项目设计探索(一)

  1. 云栖社区>
  2. 博客>
  3. 正文

Android开发之深度项目设计探索(一)

小猪看流星 2018-08-01 12:19:00 浏览591
展开阅读全文

如何快速高效构建一款优雅的Android-app架构是大家常聊的话题,本系列文章旨在分析研究探讨基于巨人的肩膀上搭建一款app项目架构。不仅是为了加深对知识点的学习以使用,而且也为了后面的准备。

目前已经有很多开发者贡献了他们的架构轮子,为他们的开源精神点赞。另外,一些优秀的架构涉及到的知识点也值得我们学习和研究(优秀的框架当然可以直接拿来用嘛,这就是开源的灵魂,人人为我,我为人人)

下面是深度项目用到的一些知识点:

项目架构:组件化 + MVP
组件化:

随着APP版本不断迭代,产品不断升级,新功能不断增加,业务会变的越来越复杂,APP业务模块代码也会变的越来越多。长期下去必然会导致APP架构过于冗长杂!试想,Android项目在编译代码的时候电脑会非常卡顿,又因为单一工程下代码耦合严重,每修改一处代码后都要重新编译打包测试,耗时耗力,最重要的是这样的代码想要做单元测试根本无从下手,所以必须有更灵活的架构代替过去单一的工程架构。

基于此组件化方案出现了,给了我们一种新的解决思路:将项目切割成若干个组件,每个组件都是可以独立运行的APP(因为Android Studio声明一个Module 是APP还是Library的主要区别是:apply plugin: 'com.android.application'、apply plugin: 'com.android.library')通过区分以及动态配置,有利于开发人员灵活使用且提高效率(职责细分,提高团队开发意识),当项目完成之时将组件合并在一起,即可组成一个完整的APP,大抵组件化思路就是这样。

另外,组件之间的通信可以使用一些成熟的路由框架。


img_3a0428c2593e6b61036074f18a319d6d.png
组件化方案
MVP:

我想大家最熟悉的就是MVP设计架构了。

MVP,全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,
Model提供数据(数据逻辑层,JavaBean模型),View负责显示(一般是指UI界面,如Activity、Fragment等等)。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

市面上关于MVP的版本太多,但是其本质都是解耦,实现细节则是通过接口来进行结果的传递。

img_58b6c845fde42322a8b4016286edb3aa.png
MVP架构
依赖注入:Dagger2 + Butterknife
Dagger2:

Dagger2是一款非常优秀的“依赖注入”框架,(拓展:IOC,英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。)关于具体的原理和逻辑,仁者见仁智者见智。


img_a1fcef717b0f90651ca40a82a0d49f48.png
Dagger2

针对上图提供一个简单的说明:
1)Module 提供依赖,也就是对象(类似经济学里面的供给方)

2)Component 关联依赖,类似于一个容器,中间商(供给方---需求方,两者联系的桥梁),也称连接器

3)Container 使用依赖,(类似于经济学里面的需求方)

Dagger2 重要的注解:

1)@Inject ,在需要依赖(也就是需要具体的对象)时候使用这个注解,

2)@Module ,这个里面的方法专门提供依赖,用此注解的时候,Dagger在构造类的实例的时候就知道去那里找到需要的依赖,

3)@Provide ,这个注解,主要是用来提供依赖,(与@inject互相对应,供给方or需求方一 一对应的关系)

4)@Component ,连接的桥梁,也称为注入器,Dagger源代码里面,此注解需要Module,本质是一个interface,这个接口本身不提供实例对象,由注解@Component 后面的{}里面的.class去提供,

另外,Dagger2也是项目一个深度解耦的有效举措,非常值得一用。

Butterknife:

ButterKnife是一个专注于Android系统的View注入框架,试想我们早期是通过findViewById来找到布局里面的View对象,现在通过ButterKnife可以很轻松的省去这些步骤。通过插件我们可以一键生成寻找viewID、对控件进行点击监听的操作。强大的View绑定和Click事件处理功能,简化代码,提升开发效率 且 代码清晰,可读性强,的确是一款良心之作。作者是我们熟悉的:JakeWharton

另外,ButterKnife是通过注解来完成操作的,并不是在运行时反射的(早期是反射,现在是注解),而是在编译的时候生成新的class来完成具体的操作,运行时不会影响APP效率

项目逻辑

RxJava2:

RxJava2主要提供优雅的响应式Api解决异步请求以及事件处理。其强大的操作符,基于观察者模式的结果传递,简洁精悍的线程调度器,让我们值得学习以及运用在APP上。

RxAndroid:

RxAndroid 为Android提供响应式Api解决方案

Rxlifecycle:

Rxlifecycle本质是为了解决Rxjava2生命周期的问题,通过Rxlifecycle,针对Rxjava2的activity和fragment的生命周期可以得到解决.

RxCache:

RxCache 使用注解为Retrofit加入二级缓存(内存,磁盘)的缓存库.

RxErroHandler

RxErroHandler 是RxJava的错误处理库,可在出现错误后重试.

RxPermissions

RxPermissions 用于处理Android运行时权限的响应式库.

网络框架:Retrofit、OkHttp
Retrofit、OkHttp:

这两款是Android开发经典的网络框架(Retrofit底层是OkHttp)。Retrofit专注封装接口完成业务需求,okhttp专注网络请求的安全高效。内部优秀的拦截器,GZIP压缩,线程池合理使用,让开发者得心应手。

数据解析 Gson
Gson:

Gson是google解析Json的一个开源框架,语法简介且效率高

组件通信 EventBus
EventBus:

能够简化各组件间的通信,让我们的代码书写变得简单,能有效的分离事件发送方和接收方(也就是解耦的意思),能避免复杂和容易出错的依赖性和生命周期问题。

img_ac071705b3b62b85a827239ec691bd88.png
EventBus
图片框架 Glide
Glide:

Glide是谷歌开源的一款专注于提供流畅划动能力的“图片加载和缓存框架,使用简单

日志框架 Logger
Logger:

Logger是一款让log日志优雅显示的框架,亮点是优雅的输出log信息,并且支持多种格式:线程、Json、Xml、List、Map。

路由框架 ARouter
ARouter:

ARouter是阿里开源的一款路由框架,下面只是列举部分优点:通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式。
另外,ARouter路由解决方案也是实现组件化的重要举措

作为《Android开发之深度项目设计探索》系列的第一篇,主要是技术选型(其中 Rx系列涉及到的知识点很多且是重点),那么接下来的文章就是理论联系实际进行代码实战!

敬请期待!

如果这篇文章对你有帮助,希望各位看官留下宝贵的star,谢谢。

Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果。

网友评论

登录后评论
0/500
评论
小猪看流星
+ 关注