Volley和XUtils区别

来源:互联网 发布:淘宝旺铺专业版价格 编辑:程序博客网 时间:2024/06/14 07:34

在RetroFit结合OkHttp大行其到的背景下,把原来的流行框架理清楚是很有必要的,毕竟最新框架都是从老框架逐步发展过来的

先说Xutils;

  • xUtils包含了很多实用的android工具;
  • xutils:快速开发型框架,DbUtils(orm),ViewUtils(ioc),HttpUtils,BitmapUtils
  • xUtils支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响;
  • xUtils 最低兼容Android 4.0 (api level 14);
  • xUtils3变化较多所以建立了新的项目不在旧版(github.com/wyouflf/xUtils)上继续维护, 相对于旧版本: 
    • HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略;
    • 支持标准的Cookie策略, 区分domain, path;
    • 事件注解去除不常用的功能, 提高性能;
    • 数据库api简化提高性能, 达到和greenDao一致的性能;
    • 图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转。

Volley:Google在2013年开发出来的,简单使用,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。以post请求为例
1,首先创建一个RequestQueue请求队列,
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
2,定义请求方式以字符串请求为例,使用请求方法Get还是Post,响应回调监听,错误监听,这几个参数构造出一个字符串请求队列
StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,new Response.Listener<String>() {
public void onResponse(String response) {
sendMessage(mHandler, response, type);
dissMissDialog();
}
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
sendMessage(mHandler, "{\"Result\":\"201\"}", type);
dissMissDialog();
}
}) 
3,重写Request类中的getParams方法,把参数放在Map中
{
protected Map<String, String> getParams() {
//在这里设置需要post的参数
Map<String, String> map = new HashMap<String, String>();  
map.put("appsecret", "X0B66J2H0T");
map.put("args", args);
return map;
}

}
4,
设置请求标记,给相应的标签设置请求,为了在每个Http请求注销前,将包含该标签的请求也要注销,避免不必要的数据请求提高用户体验
stringRequest.setTag("volleypost");
在Activity的生命周期onStop时注销请求避免重复请求问题
  MyApplication.getHttpQueue().cancelAll("volleyget");    MyApplication.getHttpQueue().cancelAll("volleypost");
使用以上请求方式可以返回一段字符串,如果返回一段JsonObjectRequest,就需要new JsonObjectRequest();大致与请求Sring用法类似。还有强大的图片请求类,new BitmapRequest(),这个构造方法比JsonObjectRequest多两个参数,允许加载图片的宽高,比如100,100,假如图片宽高比100大,就会对图片进行相应压缩,还可以配置图片的颜色属性Config.RGB_565,Volley还有另外两种图片的加载方式,ImageLoader这个类需要implements ImageCache.另外一个使用空间NetWorkImageView同样也可以实现图片加载,使用Volley的三大特色,1,使用简单
只需简单配置就可以使用了,2,可以定义Request,比如想要XmlRequest,或者GsonRequet只需要实现Request接口,3,Volley内部已经实现了HTTP网络请求的缓存机制,节省流量更加快速。

 Volley总结

其中蓝色部分代表主线程,绿色部分代表缓存线程,橙色部分代表网络线程。我们在主线程中调用RequestQueue的add()方法来添加一条网络请求,这条请求会先被加入到缓存队列当中,如果发现可以找到相应的缓存结果就直接读取缓存并解析,然后回调给主线程。如果在缓存中没有找到结果,则将这条请求加入到网络请求队列中,然后处理发送HTTP请求,解析响应结果,写入缓存,并回调主线程


原创粉丝点击