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

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

如何快速高效构建一款优雅的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地址),文章请勿滥用,也希望大家尊重笔者的劳动成果。

相关文章
|
27天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
65 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
23天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
155 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
178 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
55 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
110 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
22天前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
43 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
990 0
|
Android开发
Android Studio在android Emulator中运行的项目黑屏
Android Studio在android Emulator中运行的项目黑屏
784 0
Android Studio在android Emulator中运行的项目黑屏
|
Android开发 开发者 Windows
Android Studio运行项目
一、在真机上运行(Mac没得) 二、Android Studio自带模拟器(AVD)安装以及运行项目 三、在模拟器上运行
681 0
Android Studio运行项目

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 10
    Android实战经验之Kotlin中快速实现MVI架构
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    63
  • 2
    android FragmentManager 删除所有Fragment 重建
    25
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    41
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    41
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    44
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    155
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    52
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    72
  • 9
    Android历史版本与APK文件结构
    178
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54