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

如何快速高效构建一款优雅的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,大抵组件化思路就是这样。

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


组件化方案
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的版本太多,但是其本质都是解耦,实现细节则是通过接口来进行结果的传递。

MVP架构
依赖注入:Dagger2 + Butterknife
Dagger2:

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


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:

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

EventBus
图片框架 Glide
Glide:

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

日志框架 Logger
Logger:

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

路由框架 ARouter
ARouter:

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

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

敬请期待!

如果这篇文章对您有开发or学习上的些许帮助,希望各位看官留下宝贵的star,谢谢。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容