范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

看完这篇文章,带你彻底理解Android架构

  用本篇文章理论知识和架构原则实践了一个 wanAndroid 项目,其中全部采用 kotlin 编写并抛弃了 Rxjava,因为 kotlin 可以完全替代他,github 本项目中汇总了业界知名的架构文章和一些项目帮你彻底理解架构。后续本项目将持续更新,并完善 wanAndorid 的所有功能。还会用 23 种设计模式在项目中实践,彻底理解设计模式在业务场景中的使用。一、什么是架构
  1.1 架构介绍
  架构究竟是什么?如何更好的理解架构。我们知道中国文字博大精深可以说从文字的组成就能理解其含义。架构也不例外 "架构" 是由 "架" 、"构" 组成。
  架:建造、搭设、支撑。简称:整体结构。
  构:屋宇、供人居住的木、砖瓦构筑物。简称:组件。
  整体结构和组件的组合就形成了架构。以 Android 架构为例子,一个 APP 通常是由 class(类)组成,而这些 class 之间如何如何组合、相互之间如何发生作用,则是影响这个 APP 本身的关键点。细分的话可以分为类、接口(连接器)、任务流。所谓类就是组成架构的核心 "砖瓦",而接口则是这些类之间通讯的路径、通讯的机制、通讯的期望结果。任务流则是描述系统如何使用类和接口完成某一项需求比如:一次网络请求。 上面介绍架构中提到了房屋、木头、砖瓦可见架构和建筑有着彼此的联系。
  1.2 建筑学
  上世纪 60 年代已经设计软件架构这个概念了,到了 90 年代软件架构这个概念才开始流行起来。而计算机的历史开始于上世纪五十年代相比建筑历史就非常短暂了,建筑工程从石器时代就开始了。人类在几千年的建筑设计实践中积累了大量的经验和教训,建筑设计基本上包含两点,一是建筑风格,二是建筑模式。独特的建筑风格和恰当选择的建筑模式,可以使它成为一个独一无二的建筑。
  下图的照片显示了古代玛雅建筑:Chichen-Itza,九个巨大的石级堆垒而上,九十一级台阶(象征着四季的天数)夺路而出,塔顶的神殿耸入云天。所有的数字都如日历般严谨,风格雄浑。难以想象这是石器时代的建筑物。
  英国首相丘吉尔说,我们构造建筑物,建筑也构造我们,英国下议院的会议厅较狭窄,无法使所有的下议院议员面向同一个方向入座,而必须分成两侧入座。丘吉尔认为,议员们入座的时候自然会选择与自己政见相同的人同时入座,而这就是英国政党制的起源。  二、架构设计目的
  几乎所有的软件设计理念都可以在浩瀚的建筑学历史中找到。许多人认为 "形式必须服从功能"(你认同这种观点吗?欢迎在评论区留下你的看法)。而好的设计既有形式又有功能。比如我们的北京大兴国际机场大兴机场以航站楼为核心向四周延展从空中俯瞰就像是一只展翅欲飞的凤凰,以航站楼核心区为中心,分别向东北、东南、中南、西南、西北五个方向伸出了五条指廊,通往北京大兴国际机场的飞行区。这种从中心向四面八方延伸的设计,使航站楼中心点到最远端登机口的距离只有 600 米左右,旅客步行前往最多只需 8 分钟。
  建筑的设计又有一定的目的性,而软件架构设计也同理。软件架构目的性大致可分为可扩展性、可定制化、可伸缩、可维护性:  可扩展性 :APP 必须能够在用户的 UV/PV 数量快速增加的情况下,保持软件合理的性能。只有这样在快速的从 0 到 1 的需求迭代中才能后顾无忧。  可定制化 : 在同一个软件系统中可能面向的用户群体是不同的、多样的,需要满足根据用户群的不同和市场需求的不同进行定制化。比如一个 APP 中某些功能只针对特定用户开放。  可伸缩性 : 在新技术出现的时候,一个软件系统应当允许接入新技术,从而对现有系统进行功能和性能的扩展。  可维护性 : 软件系统的维护包括两方面,一是修复现有的 bug,二是将新的迭代需求开发到现有系统中去。一个易于维护的系统可以有效地降低人力和物力。  三、实践一个 APP:玩 Android
  针对上面对架构的介绍,相信已经从陌生走向熟悉了。但是最重要的还是实践,伟大的毛主席曾经说过 你要想知道梨子的滋味,就要亲口尝一下。因此借用了 wanAndoird 开放 API 简单实现一个 APP 并概括上述架构的关键点,主要的功能点如下:  首页是热搜文章的分类列表。  项目页面主要包括完整项目。  文章、项目点击可以查看详情。
  不知道还有没有印象上文提到了架构 "形式必须服从功能" 当然这不是权威的定义,可以作为参考。我们先不管是形式服从功能还是功能服从形式,可以结构化思维理解下这句话,架构大致可分为:形式、功能所以我们依次按照此两点进行搭建 wanAndroid 项目。
  3.1 架构 - 形式
  从形式本身而言包括两部分。一是事物外在的形状,二是内在的结构、组合方式。实际上,这两者为同一。内容如何内在组合,对外就自然有某种表现的形状。
  我们打开项目的第一眼接触到和看到的就是我们项目的目录结构,更清晰更简洁的目录结构可以使我们更快的上手项目。这里主要分为两部分核心模块、业务功能模块:
  核心模块主要有以下职责:  Dagger 依赖注入处理。  扩展功能:各种 utils。  基础层的抽象:BaseActivity、BaseViewModel 等。  第三库处理、网络异常处理等。
  业务功能模块主要有以下好处:  高内聚性。  清晰的功能结构。  模块化。  功能隔离并封装。
  在主 APP 下进行了 core、features 的划分,业务模块并没有按照模块化的形式进行多 moudle 拆分而是聚合在 features 下,以包的形式进行了聚合,这样做的好处如下:  更快的编译速度。  减少 maven 库的依赖冲突。  通用功能的重用性。  包的内聚力。
  可以看到我们并没有采用按照业务 module 进行模块化划分,因为我之前接触过一个项目拆分了 40 多个 module 可想而知项目一旦庞大起来坏处也就暴露出来:  编译一次项目高达 7/8 分钟……  项目中的 moudle 依赖纵横交错。
  当然我并不反对多 module 模块化的存在,因为任何模式都有利有弊,这取决于当前的项目的业务来抉择使用那种形式。此外项目中全部采用 kotlin 编写:  build.gradle.kts .kts    也是官方推崇的可以使 gradle 更加简化。buildSrc   来处理 gradle 依赖。
  3.2 架构 - 功能
  在玩 Android 中的业务点功能点主要有文章、项目获取,而这些功能点大部分都离不开网络请求和回调处理。这里不再描述 MVC、MVP、MVVM 的区别和如何选择,但是我可以说明一点是任何架构模式都没有最好、最优,只有最适合当前业务的才是好架构。现在 google 官方推崇的架构主要是 MVVM 所有我们主要说下 MVVM。
  MVVM 架构模式满足上文我们描述符合的架构设计的目的,同时也遵守了官方给定的架构原则,架构原则大致有两点如下。可能光看这两个定义可能不太容易理解。所有我们用结构化思维的方式理解下,关注点分离就是将复杂问题做合理的分解,再研究分解的侧面,最后合成整体的解决方案。因此我们在 Activity 或 Fragment 不应该做业务逻辑而是把功能点拆分成需要最小的最优解,最后合并成整体方案。比如 mvvm 我们衍生出 ViewModel、LiveData、Model 等。  关注点分离 Activity 或 Fragment 中的代码应是处理界面和操作系统交互的逻辑应使这些类尽可能保持精简,这样可以避免许多与生命周期相关的问题。  通过模型驱动界面 模型是负责处理应用数据的组件。它们独立于应用中的 View 对象和应用组件,因此不受应用的生命周期以及相关的关注点的影响。
  MVVM 中每个组件仅依赖于其下一级的组件如:activity-->viewMoudle-->Repository。这时候你可能有疑惑,如果是单向依赖那网络请求的回调怎么处理?这里引出一个概念 "响应式编程" 结合 liveData 做处理其内部是观察者模式,并且关联视图的声明周期如:Activity、Fragment 或 Service。使用 LiveData 的好处如下:  不会发生内存泄漏 观察者会绑定到 Lifecycle 对象,并在其关联的生命周期遭到销毁后进行自我清理。  不会因 Activity 停止而导致崩溃 如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。  不再需要手动处理生命周期 界面组件只是观察相关数据,不会停止或恢复观察。LiveData 将自动管理所有这些操作,因为它在观察时可以感知相关的生命周期状态变化。
  3.3 UseCase
  UseCase 是 Clean 架构中的一个概念,其中主要用于 UI 和数据层的连接同时也会进行 IO 的切换,这里可以看到本项目抛弃了 Rxjava 因为他完全可以用 Kotlin 来替代。  abstract class UseCase where Type : Any {    abstract suspend fun run(params: Params): Either{    operator fun invoke(params: Params, onResult: (Either) -> Unit = {}) {       val job = GlobalScope.async(Dispatchers.IO) { run(params) }       GlobalScope.launch(Dispatchers.Main) { onResult(job.await()) }   }    class None } 
  3.4 一个完整网络请求流程
  View :一个网络请求的发送并订阅,处理 UI 数据。
  ViewModel :为 View(Activity/Fragment) 提供数据,并处理业务逻辑。
  LiveData :具有生命周期可观察的数据存储器类,LiveData 存储在 ViewModel 中。
  UseCases :用于连接 ViewModel 和 Model,并更新 LiveData。
  Model :可以从网络、数据库或其他 API 获取数据。  四、总结
  我们可以体会到从架构理论定义到实践的过程相信你有了自己的理解和见解,但这只是一种实现方式,如果在满足架构设计目的和架构原则的情况下你有更好的实践方式或者有任何和架构项目的疑问点都可以在评论区或者 Github 中留言讨论。这里我也有个疑问点就是:你认同形式必须服从功能吗?欢迎留下你的见解。
  后续本项目将持续更新,并完善 wanAndorid 的所有功能。还会用 23 种设计模式在项目中实践,彻底理解设计模式在业务场景中的使用,欢迎持续关注。当其他的平台如后端、前端架构的搭建都是殊途同归的。但是我还是有几点建议:  业务决定架构。  不要过度设计。  面向接口编程。  形式需服从功能。
  项目:
  https://github.com/blindmonk/WanArchitecture
  最后,在这里我再分享一份由多位大佬亲自收录整理的Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
  这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
  当然,你也可以拿去查漏补缺,提升自身的竞争力。
  如果你有需要的话,只需私信我【进阶】即可获取

最前线为了吸引粉丝,高通推出了1万元的骁龙联名款智能机如果你是高通粉丝社区SnapdragonInsiders160万社员中的一位,那你将有机会买到骁龙牌智能机。这是一款和华硕合作的手机,目前只开放给SnapdragonInsider三星M52手机曝光5000mAh电池2000元上下外媒报道称,三星即将发布的M525G手机的3C认证信息在近日流出,认证文件确认该手机的电池额定最小容量为4860mAh,即正常标注的5000mAh。结合此前的爆料信息,三星Gala华为霸气官宣!鸿蒙OS系统用户装机量暴增至3千万年底破4亿没压力7月10日讯相信大家都知道,在6月8日晚间,华为官方正式霸气对外官宣,鸿蒙OS2。0用户装机量突破了3000万大关,距离华为鸿蒙OS2。0系统发布上市仅仅过去一个月时间,就以每天百vivoS10入网参数公布6。44英寸屏,3970mAh电池IT之家7月10日消息vivo官方宣布,将于7月15日发布vivoS10系列新机,代言人为Lisa蔡徐坤刘昊然。近日,该机已入网工信部,代号V2121A,机身尺寸为158。20mm美团城市低空物流将带来什么样的变革?无人机快递配送业务,其实对于很多的快递服务行业来说,都想在这个领域有所突破。因为这将是未来服务行业的终极状态。因为现在很多的行业都在朝着无人的趋势发展。在2021年的世界人工智能大2021世界人工智能大会专家呼吁人工智能赋能城市高质量发展安全问题不容忽视央广网上海7月10日消息(记者傅闻捷韩晓余)7月8日至10日,2021世界人工智能大会在上海召开,作为引领新一轮科技革命和产业变革的战略性领域,人工智能是赋能城市转型提升助推经济高乐视公司破产,商标来凑,近2000项商标竟拍出1。4亿高价早在去年6月份,宣布破产的乐视网将名下持有的1354项商标进行拍卖,其中就包含有乐视TV乐视TV超级电视在内的1300余个商标。2020年6月29日,乐视网这1354项商标在京东拍iphone13全系列价格曝光前言今年9月份,苹果即将推出新的13系列,此前关于新手机的命名还众说纷纭,目前从各个博主爆料的信息中基本可以确定新手机会是13系列,不会改名为12S很多用户都在关心和期待13的售价宋清辉新能源车助中国制造弯道超车中国新能源汽车已进入成长期,预计再过几年时间,中国新能源车产业将进入高速成长期。照此发展下去,新能源车产业无疑将会成为中国经济增长的又一重要引擎,更是中国制造实现弯道超车的重要机遇禁止合并!继阿里美团滴滴之后,腾讯也被反垄断审查了一花独放不是春,百花齐放春满园。这句出自古今贤文的话自从出现在博鳌论坛之后应用越来越广了。随着越来越多的互联网大企业科技巨头被反垄断调查,用户们也越来越能体会到这句话的思想了。近日美国国会议员宣布投资狗狗币以太坊和艾达币美国国会议员巴里摩尔宣布了他最近购买的加密货币。他购买了狗狗币艾达币和以太币。来自阿拉巴马州的美国代表巴里摩尔上周提交了一份定期交易报告(PTR),宣布他最近购买了加密货币。根据文
小米赢了世界,却输给了舆论小米赢了世界却输给了舆论因为国内的小米可以说是所有同行的敌人明明可以卖4000的手机,你要卖1999,不搞死你我怎么赚钱?天天让你科普什么CPU,什么硬件,什么配置,比以前买电脑组小米超苹果,豪捐170多亿,真假公益?雷军陷舆论风波近日,小米官宣宣布21年Q2销量超苹果,成为全球第二大智能手机厂商后,小米集团董事长兼CEO雷军还宣布将向公益机构捐赠6。16亿股票。按星期五收市价,大约值170多亿港元。随着雷军小米11还能蹦跶多久?虽然小米11Pro被称为安卓机皇,小米11U被称为安卓之光,打着全新全新高端之作的宣传语。但除了充电,屏幕,长焦让人很满意,其他方面小米11真的有点不尽人意。微信扫码扫到手机重启。李焕英登顶前9个月全球票房排行榜,唐人街探案3位列第三转眼之间,10月份已经过去了一半,而今年也已经过去了一大半,今天笔者就带大家回顾一下今年前9个月中,全球票房最高的10部电影。因为统计的是前9个月的票房,所以只要能在2021年1月小米阿里腾讯多家企业驰援河南,喷子会不会说只捐这么一点?小米雷军早上微博发布最新信息,也是小米公益基金获雷军捐赠股票后的几天之类第一笔捐赠的公开信息。阿里MCC河南分公司向郑州市7000个社区。2。1万个团点,免费提供首批45万件蔬菜粮好莱坞第3季度票房最高的10部电影,2亿巨制自杀小队2仅列第9我就问你时间过得快不快,这眼一闭一睁,9月份也已经过去了,嚎2021年眨眼间就过去了四分之三,今天笔者就给大家盘点一下,在刚刚过去的第三季度也就是7至9月,北美票房最高的10部好莱11月在影院上映的9部好莱坞大片,生化危机PK永恒族大家好,我是小李子,欢迎收看本期节目。这眼一闭一睁,10月份也要过去了,嚎回顾整个10月份,大家有木有觉得灰常过瘾,9月份如果用平淡来形容,那10月份绝对可以说得上happy了,国盘点007电影中最有魅力的15个邦女郎,哈莉贝瑞高居榜首007无暇赴死终于在国内上映了,相信不少小伙伴们都已经看过了。看007电影,除了火爆的动作场面和有趣的高科技以外,大家最想看的估计就是外表靓丽的邦女郎了,今天小李子就给大家盘点一下9月份HBO热度最高的10部电视剧,权力的游戏仅列第4权力的游戏是过去多年在全球大火的电视剧,自从2019年完结之后,粉丝们对该剧依然是念念不忘。今年是权力的游戏开播十周年,权游在各大播放平台上依然保持较高的热度,而在刚刚过去的九月份智能电动车充电桩怎么收费才算合理?现在越来越多的新建小区都安装上了智能电动车充电桩,甚至很多老旧小区也将安装电动车充电桩的计划提上了日程。电动车充电桩的出现,固然方便了安全充电,但是也有一部分车主对这种充电桩的收费科学施策利充电,防患未燃保安全自8月1日高层民用建筑消防安全管理规定正式实施后,电动自行车被严格禁止在高层建筑的公共区域停放和充电。为方便小区居民给电动自行车充电,很多小区都开始建设车棚充电桩等充电基础设施,然