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地址),文章请勿滥用,也希望大家尊重笔者的劳动成果。

目录
打赏
0
0
0
0
4
分享
相关文章
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
41 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
142 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【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
170 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
51 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
102 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
41 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
Android开发的技术与开发流程
Android开发的技术与开发流程
437 1
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
109 5
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
    11
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    21
  • 3
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    13
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    2
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    3
  • 6
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    3
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    2
  • 8
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    6
  • 9
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    3
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    1
  • 1
    android FragmentManager 删除所有Fragment 重建
    18
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    30
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    35
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    42
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    142
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    46
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    58
  • 8
    Android历史版本与APK文件结构
    159
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    41