关于androidapp架构的一点思考

pureChilder pureChilder     2023-03-28     708

关键词:

关于android app架构的一点思考

关于架构,我们首先要明白的点就是为什么要进行架构设计?
对程序进行架构设计的原因,对于大企业归根到底是为了提高生产力。通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题,而且也方便项目的管理和维护。
但设计不能违背目的,对于不同量级的工程,具体架构的实现方式必然是不同的,切忌犯为了设计而设计,为了架构而架构的毛病。

例子,一个Android应用中,关于Activity,就没有必要做Mvp,或者MVVM的设计,因为没有业务要求,也没有网络请求

但是当你开发的App最终代码量应该在10W行以上,本地需要进行复杂操作,同时也需要考虑到与其余的Android开发者以及后台开发人员之间的同步配合,那就需要在架构上进行一些思考。框架最终要实现的目的无非就是增强项目代码的可读性 ,维护性 和方便测试。
安卓开始之初,业务层项目框架搭建从最初的mvc,到mvp,再到mvvm,再到mvvm的演化mvi,基本的思想都是是相同的,最本质的概念就是 Activity 里做的事情太多了,所以要把 Activity 中与 UI 无关的部分抽离出来,交给别人做。这个 “别人” 在 MVP 里叫作 Presenter,在 MVVM 里叫作 ViewModel。而不论是 MVP 中的约定接口,还是 ViewModel 里的观察者模式,这些都是实现上的细节而已。
而不管是MVC,MVP,MVVM,MVI他们的侧重点是数据从获取到展示的代码逻辑,所要解决的核心问题是数据和界面之间如何更好联系的问题,它的侧重点是界面和数据。

MVI
与前者的主要区别不在于强调严格的单向数据流,而在于从命令式的开发模式,转变为响应式的开发模式。我们并不是说越新潮,越复杂的架构就是最好的,只有合适的架构才是最好的。但是不可否认,从 React 到 Flutter,从 MVI 到 Compose,响应式编程似乎有一统天下的趋势。未来会怎么样,让我们拭目以待。

模块化,组件化、插件化在架构层面的侧重点是业务功能拆分,其中模块化是将应用按功能拆分不同组件或者模块,组件化可以让模块独立运行,不再相互依赖,组件可以依赖同一套libray,组件化最大的好处是有利于团队开发,在团队开发中不需要等待别人的代码,自己可以进行独立测试,写库的写库,写模块的写模块,互不干涉,在android中一个组件对应着一个module,组件化还有一个好处就是可以提高编译效率。在大型项目中使用组件化是必要的,然而在一些独立开发的小型项目中使用组件化反而得不偿失,因为组件化多少会带来代码和配置增多。插件化核心在于动态加载模块,在庞大的工程中,可以按需下载功能包,它不是官方支持的,是一种取巧的技术,在国内盛行,因为android的开源,framework层代码对程序员透明,插件化是android开发者解决一个又一个的问题后诞生的,首先解决的是加载dex文件,android PathClassLoader就能解决,其次是资源文件的加载(res、assets、so) AssetsManager能解决,在资源加载的过程中还要考虑资源id重复或者找不到的问题,再次要解决activity清单文件注册问题,在分析framework后可以采用hook,也就是在调用ams时和ams返回后两个地方进行移花接木,插件化解决了初安装包体太大的问题,按需加载也解决了功能动态下发的问题,但是维护性很高,比如每个android新版本都要做兼容,甚至完全要看谷歌让不让用。
组件化和插件化都是业务架构范畴,是考虑如何拆分以及更好的拆分业务才是核心。

附送一张我自己实现的架构设计:

详细设计:

具体到Store Module,Main Module,Mine Module模块之间的调用通过依赖该模块的export Module

如Mine Module中吊起Store Module,Mine Module依赖 Store Module Export模块即可

关于个推的一点想法

...能接受到消息。  说到这个问题,先说一个我日常时候androidapp的一个体会,我们经常打开某一个不常用的应用,打开的同时会弹出很多这个app和其他不常用app的推送消息(注意是其他且不常用的app)。为什么呢?因为好多 查看详情

周志华:关于机器学习的一点思考

周志华:关于机器学习的一点思考 https://mp.weixin.qq.com/s/sEZM_o5D6AhyMgvocbsFhw  演讲:周志华整理:肖琴、闻菲【新智元导读】机器学习如今大获成功的原因有哪些?如何才能取得进一步的突破?南京大学周志华教授在AIWOR... 查看详情

关于重构工作的一点思考

  最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考。起因:  本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,... 查看详情

关于异常的一点思考

一、异常的(检测)触发:编译器插入检查指令(对语言规定的检查项);二、异常的基本处理机制:类似中断,生成异常场景信息,然后执行转发操作。三、异常处理的上下文:由线程货其他结构保存的类似函数调用栈的上下文... 查看详情

关于ugc的一点思考

   ugc会使互联网繁荣,但依赖大众用户创造的内容质量上会存在参差不齐,这是ugc本身存在的问题。   就拿技术论坛或社区来说,好的内容不少,但质量不好的内容也很多。社区在引导用户发言的同时,也... 查看详情

关于函数执行过程的一点思考

  刚刚有一个同学问我下面的代码出现了什么问题?大家可以一起看看,这是初学者非常容易犯的错误。<!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title></head><body> <formac 查看详情

关于交大二手市场的一点思考

关于交大二手市场项目的一些思考主要问题:是否应该叫做交大二手市场,这个名字如果给你推荐,你会不会选择使用这个app或登录这个网站呢?第一部分:产品应该是什么样的1.主要针对人群:大一大二新生为买方、大三大四... 查看详情

关于共享单车的一点思考

 市场环境(1)该类产品的市场生成状况如何,收益比例如何然后再决定是否加入    共享单车是共享经济的一个代表,从政治角度来看,符合节约环保的倡导;从经济角度看,经济高速发展必然需要资源的整... 查看详情

关于多线程编程的一点思考

多线程编程主要是为了解决处理慢的问题。使用多个线程进行并发处理资源,使用的模型最多的还是生产者消费者模型。------------------------------------------------------目前我遇到的问题或者体会主要有两个:1.生产者产生速度不能大... 查看详情

关于app测试的一点思考

1 系统入口部分要细化测试用例颗粒度 充分准备好测试数据  真实覆盖线上场景 比如注册验证码的获取 国内国外手机 一般国外手机发送短信打电话都要加上区号  2新版本发布  有新功能... 查看详情

关于js中函数的返回值的一点死思考

在Javascript中,函数总是会有一个返回值。即使我们没有显示的使用“return”,程序也会隐式的返回一个“undefined”。通过下面的小demo即可理解。demo1functionfn(){return1;}fn();运行结果:1 demo2functionfn(){console.log(1);}fn(); 运行结... 查看详情

关于图像是如何运动的一点思考

   由于笔者没有学过正规的图像处理,只是自己在徒手撸控件时的一些思考,难免会有疏漏,敬请谅解。  最开始,我做一个图像变换的时候,方法是对一个个点进行单独的计算,以确定其变换的方法以及代码... 查看详情

关于task的一点思考和建议

前言本打算继续写SQLServer系列,接下来应该是死锁了,但是在.NETCore项目中到处都是异步,最近在写一个爬虫用到异步,之前不是很频繁用到异步,当用到时就有点缩手缩尾,怕留下坑,还是小心点才是,于是一发不可收拾,发... 查看详情

关于使用原生javascript的一点思考

前端很大,大到那些连类都不知道的仅仅上了培训班的人都会用jquery写网页。。。 当一个行业的从业人数出现爆发性增长时,基于规模效应,真正有用的有思想的技术就会出现。。。 这也是我推崇用原生JavaScript写代码... 查看详情

20170905:关于投资我的一点思考

  这里不讨论投资的重要性,不讨论投资的具体方法。简单的谈谈具体投资那些具体的行业,以及对应支持理论。  金融行业,如果你相信未来中国会超过美国,那么中国会有与之相匹配的金融行业。  航空业,如果你相... 查看详情

关于头文件定义的一点思考

...项目的时候,程序上遇到一个问题,困扰了我很长时间,关于关键字重定义的问题。我在一个包含了所有头文件的总头文件里面重定义了关键字,但是运行的时候还是报错,当我在这个报错的头文件里面在写一次关键字的重定义... 查看详情

关于后台系统自动生成的一点思考

大量实践发现后台管理程序,其实90%的代码都是相同的,当然是在抛弃复杂逻辑业务的情况下,那么如何能高效的节约这些时间呢,那就是接下来我要说的,对于后台系统自动生成的一些思考。适用情景:  1、表编号id为自增... 查看详情

关于后台系统自动生成的一点思考

大量实践发现后台管理程序,其实90%的代码都是相同的,当然是在抛弃复杂逻辑业务的情况下,那么如何能高效的节约这些时间呢,那就是接下来我要说的,对于后台系统自动生成的一些思考。适用情景:  1、表编号id为自增... 查看详情