软件架构
MVC | MVP | MVVM | |
---|---|---|---|
介绍 | Model:数据结构相关的类 View:XML文件 Controller:Activity |
view:Activity,Fragment,Adapter等直接和UI相关的类 Model:数据结构和操作相关的类 Presenter:作为View与Model交互的中间纽带,处理与用户交互的业务逻辑 iew interface:需要View实现的接口,View通过View interface与Presenter进行交互 |
MVVM可以算是MVP的升级版,Model和View类似MVP VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体 |
优点 | 代码结构简单 | view层和model层分离 可将一个Presenter用于多个视图 方便单元测试 |
用户直接交互的是View View和ViewModel是多对一的关系 View和ViewModel的双向数据绑定 |
缺点 | xml作为view层,可控性较差 view层和model层存在耦合 Activity代码臃肿 |
由于通过接口进行控制,接口粒度不好控制 UI驱动,要考虑线程及生命周期 V层和P层存在耦合 复杂业务也会导致P层代码臃肿 |
由于去除了Presenter层,会导致view层依然过重 |
网络加载框架
HTTP客户端
HttpClient | HttpURLConnection | OkHttp | |
---|---|---|---|
介绍 | Apache的一个三方网络框架 | 一个多用途、轻量级的http客户端 | Square 公司封装的一个高性能 http 请求库 |
优点 | 网络请求做了完善的封装,api众多,用起来比较方便,开发快。实现比较稳定,bug比较少 | 由于API比较简单,使得我们可以更加容易的去使用和拓展它 | 链接复用 Response 缓存和 Cookie 默认 GZIP 请求失败自动重连 DNS 扩展 Http2/SPDY/WebSocket协议支持 |
缺点 | 由于其api众多,是我们很难再不破坏兼容性的情况下对其进行扩展,在android5.0被废弃,6.0逐渐删除 | 它对网络请求的封装没有HttpClient彻底,api比较简单,用起来没有那么方便 | okhttp请求网络切换回来是在线程里面的,不是在主线程,不能直接刷新UI,需要我们手动处理。封装比较麻烦 |
总结:Android2.3以前适合使用HttpClient,而2.3以后适用于OkHttp,HttpURLConnection在Android4.4以后已将底层改用OkHttp,但是OkHttp使用时需要进行一层封装
封装框架
volley | Retrofit | |
---|---|---|
介绍 | 一个简单的异步http库 | Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架 |
优点 | 支持图像加载 自带缓存,支持自定义请求 轻量级网络交互,适合大量的,小数据传输。 |
彻底解耦 默认使用 OkHttp ,性能上要比 Volley 占优势 支持同步、异步和RxJava |
缺点 | 不支持 post 大数据,不适合上传文件 图片加载性能一般 |
比较高的门槛 |
总结:volley使用简单,适合用于多次的小数据传输;Retrofit适用范围较广,API使用简单,但有一定使用门槛,配合RxJava使用更佳
图片加载框架
Glide | Picasso | Fresco | |
---|---|---|---|
介绍 | 2014年 Google 员工的开源项目 | 2013年 Square 开源的项目 | 2015年Facebook开源的图片框架 |
优点 | 可接受Activity/fragment的context,控制生命周期 支持git 支持okhttp,Volley 内存友好 2级缓存 |
自带统计监控功能 使用复杂的图片压缩转换来尽可能的减少内存消耗 |
图片的渐进式呈现 图片存储在安卓系统的匿名共享内存,无OOM 很好的支持 GIF 自定义居中焦点 |
缺点 | 大小和方法数均大于Picasso(500k和2678) | 不支持git 无自动控制生命周期 2级缓存 |
包较大(2~3M) 使用复杂 |
总结:Glide除了包较大几乎拥有Picasso的所有优点,比较适合非专业的应用中的图片处理;Fresco拥有前面两个库的优点,但它的包很大,且使用门槛较高,比较适用于图片需求较大的应用