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层依然太重 |
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使用时须要进行一层封装 android
volley | Retrofit | |
---|---|---|
介绍 | 一个简单的异步http库 | Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架 |
优势 | 支持图像加载 自带缓存,支持自定义请求 轻量级网络交互,适合大量的,小数据传输。 |
完全解耦 默认使用 OkHttp ,性能上要比 Volley 占优点 支持同步、异步和RxJava |
缺点 | 不支持 post 大数据,不适合上传文件 图片加载性能通常 |
比较高的门槛 |
总结:volley使用简单,适合用于屡次的小数据传输;Retrofit适用范围较广,API使用简单,但有必定使用门槛,配合RxJava使用更佳 git
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拥有前面两个库的优势,但它的包很大,且使用门槛较高,比较适用于图片需求较大的应用 web