Android技术选型

软件架构

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使用时须要进行一层封装 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