Android之App整体架构介绍
image.png
App整体架构起源
对程序进⾏架构设计的原因,归根到底是为了提⾼⽣产⼒。
通过设计使程序模块化,做到模块内部的⾼聚合和模块之间的低耦合。这
样做的好处是使得程序在开发的过程中,开发⼈员只需要专注于⼀点,提⾼程序开发的效率,并且更容易进⾏后续的测试以及定位问题。基于MVP的架构设计思路
mvp的全称为Model-View-Presenter,Model提供数据,View负责显⽰,Controller/Presenter负责逻辑的处理。
在App开发过程中,经常出现的问题就是某⼀部分的代码量过⼤,虽然做了模块划分和接⼝隔离,但也很难完全避免。
从实践中看到,这更多的出现在UI部分,也就是Activity⾥。
image.png
google官方下载appMVP是⼀种使⽤⼴泛的基础架构模式,使⽤基于事件驱动的应⽤框架。
MVP从更早的MVC框架演变过来的⼀种框架,与MVC有⼀定的相似性。
MVP框架由3部分组成:View负责显⽰,Presenter负责逻辑处理,Model提供数据。
MVP与MVC之间最主要的区别在控制层上,在MVP框架中,View与Model并不直接交互,所有的交互放在Presenter中;⽽在MVC⾥,View与Model会直接产⽣⼀定的交互。
MVP的Presenter是框架的控制者,承担了⼤量的逻辑操作,⽽MVC的Controller更多时候承担⼀种转发的作⽤。因此在App中引⼊MVP的原因,是为了将此前在Activty中包含的⼤量逻辑操作放到控制层中,避免Activity的臃肿。
MVP的变种有很多,其中使⽤最⼴泛的是Passive View模式,即被动视图。在这种模式下,整个框架内部模块之间的逻辑操作均由Presenter控制,View仅仅是整个操作的汇报者和结果接收者,Model根据Presenter的单向调⽤返回数据(图⽚来⾃⽹络)。并且MVP模式使得View与Model 的耦合性更低,降低了Presenter对View的依赖,实现了关注点分离的初衷,⽅便开发⼈员的编码和测试⼯作。
UI层⼀般包括Activity,Fragment,Adapter等直接和UI相关的类,UI层的Activity在启动之后实例化相应的Presenter,App的控制权后移,由UI转移到Presenter,两者之间的通信通过BroadCast、Handler或者接⼝完成,只传递事件和结果。
举个简单的例⼦,UI层通知逻辑层(Presenter)⽤户点击了⼀个Button,逻辑层(Presenter)⾃⼰决定应该⽤什么⾏为进⾏响应,该哪个模型(Model)去做这件事,最后逻辑层(Presenter)将完成的结果更新到UI层。
image.png
ThinkAndroid Android 快速开发框架
ThinkAndroid是⼀个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进⾏Android应⽤程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent的http模块,具有快速构建⽂件缓存功能,⽆需考虑缓存⽂件的格式,都可以⾮常轻松的实现缓存,它还基于⽂件缓存模块实现了图⽚缓存功能,在android中加载的图⽚的时候,对oom的问题,和对加载图⽚错位的问题都轻易解决。
他还包括了⼀个⼿机开发中经常应⽤的实⽤⼯具类,如⽇志管理,配置⽂件管理,android下载器模块,⽹络切换检测等等⼯具。
⽬前ThinkAndroid主要有以下模块:
模块描述
MVC模块实现视图与模型的分离。
ioc模块android中的ioc模块,完全注解⽅式就可以进⾏UI绑定、res中的资源的读取、以及对象的初始化。
数据库模块android中的orm框架,使⽤了线程池对sqlite进⾏操作。
http模块通过httpclient进⾏封装http数据请求,⽀持异步及同步⽅式加载。
缓存模块通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
图⽚缓存模块imageview加载图⽚的时候⽆需考虑图⽚加载过程中出现的oom和android容器快速滑动时候出现的图⽚错位等现象。
配置器模块可以对简易的实现配对配置的操作,⽬前配置⽂件可以⽀持Preference、Properties对配置进⾏存取。
⽇志打印模块可以较快的轻易的是实现⽇志打印,⽀持⽇志打印的扩展,⽬前⽀持对sdcard写⼊本地打印、以及控制台打印
下载器模块可以简单的实现多线程下载、后台下载、断点续传、对下载进⾏控制、如开始、暂停、删除等等。
⽹络状态检测模块当⽹络状态改变时,对⽹络状态进⾏检测。
模块描述
afinal Android的快速开发框架
Afinal 是⼀个android的sqlite orm 和 ioc 框架。
同时封装了android中的http框架,使其更加简单易⽤;
使⽤finalBitmap,⽆需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图⽚加载位置错位等问题。
Afinal的宗旨是简洁,快速。约定⼤于配置的⽅式。尽量⼀⾏代码完成所有事情。
⽬前Afinal主要有四⼤模块:
模
块
描述
Fi
n
al
D
B
模
块
android中的orm框架,⼀⾏代码就可以进⾏增删改查。⽀持⼀对多,多对⼀等查询。
Fi
n
al
A
ct
ivi
ty
模
块
android中的ioc框架,完全注解⽅式就可以进⾏UI绑定和事件绑定。⽆需findViewById和setClickListener等。
Fi
n
al
H
tt
p
模
块
通过httpclient进⾏封装http数据请求,⽀持ajax⽅式加载。
Fi
n
al Bi t m a 通过FinalBitmap,imageview加载bitmap的时候⽆需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图⽚错位等现象。FinalBitmap可以配置线程加载线程数量,缓存⼤⼩,缓存路径,加载显⽰动画等。FinalBitmap的内存管理使⽤lru算法,没有使⽤弱引⽤(android2.3以后google已经不建议使⽤弱引⽤,android2.3后强⾏回收软引⽤和弱引⽤,详情查看android官⽅⽂档),更好的管理bitmap内存。FinalBitmap可以⾃定义下载器,⽤来扩展其他协议显⽰⽹络图⽚,⽐如ftp等。同时可以⾃定义bitmap显⽰器,在imageview显⽰图⽚的时候播放
p 模块动画等(默认是渐变动画显⽰)。
模
块
描述
xUtils Android开源框架
xUtils是基于Afinal开发的⽬前功能⽐较完善的⼀个Android开源框架
xUtils⽬前主要包括4⼤模块:DbUtils, ViewUtils, HttpUtils, BitmapUtils。
包含了很多实⽤的Android⼯具;⽀持⼤⽂件上传,更全⾯的Http请求协议⽀持,拥有更加灵活的ORM,更多的事件注解⽀持且不受混淆影响;最低兼容Android 2.2 (Api Level 8)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论