當咱們在使用網絡請求的時候,通常都是經過回調來獲取請求到的數據。對於網絡請求的回調須要注意的幾個點服務器
好比咱們的回調在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; } }); }