当咱们在使用网络请求的时候,通常都是经过回调来获取请求到的数据。对于网络请求的回调须要注意的几个点服务器
好比咱们的回调在Activity中处理数据,当咱们把Activity关闭后,若是获取到数据时,就算咱们的Activity被finish回调仍是会执行,那么这个时候咱们在回调里所作的一些操做,极可能会形成程序的错误。因此咱们须要在回调的时候判断下Activity是否finish.网络
isFinishing()//判断当前的Activity是否关闭,若是活动结束,返回true,不然返回false。
在一个Activity或Fragment发起网络请求的时候,当咱们关闭界面后,须要把发出的请求给取消掉,也就是说当咱们发出一个请求的时候,数据尚未获取到咱们又进入了新的界面,发起了一个新的请求,当请求多起来的时候就会出现阻塞的现象,好比:年级筛选,商品分类等这些请求都是会出现这种状况的app
这里说下不少的时候别太相信服务器返回的数据,反正我是被坑过,因此咱们尽可能对获取到的数据进行判断ide
我目前的几个项目都是使用volley,取消请求的时候能够经过tag来取消,下面是取消请求的代码code
/** * 取消某个标示的全部请求,通常取消某个界面的全部请求 * * @param tag 标示请求从哪一个界面而来,方便界面退出后取消请求 */ public void cancelAll(final String tag) { getRequestQueue().cancelAll(new RequestFilter() { @Override public boolean apply(Request<?> request) { boolean compareBool = false; if (!TextUtils.isEmpty(tag)) { Object objTag = request.getTag(); if (null != objTag) { compareBool = tag.equalsIgnoreCase(objTag.toString()); } } return compareBool; } }); }