當Activity關閉後,網路請求回撥的處理
阿新 • • 發佈:2019-01-31
當我們在使用網路請求的時候,一般都是通過回撥來獲取請求到的資料。對於網路請求的回撥需要注意的幾個點
-
比如我們的回撥在Activity中處理資料,當我們把Activity關閉後,如果獲取到資料時,就算我們的Activity被finish回撥還是會執行,那麼這個時候我們在回撥裡所做的一些操作,很可能會造成程式的錯誤。所以我們需要在回撥的時候判斷下Activity是否finish.
isFinishing()//判斷當前的Activity是否關閉,如果活動結束,返回true,否則返回false。
-
在一個Activity或Fragment發起網路請求的時候,當我們關閉介面後,需要把發出的請求給取消掉,也就是說當我們發出一個請求的時候,資料還沒有獲取到我們又進入了新的介面,發起了一個新的請求,當請求多起來的時候就會出現阻塞的現象,比如:年級篩選,商品分類等這些請求都是會出現這種情況的
-
這裡說下很多的時候別太相信伺服器返回的資料,反正我是被坑過,所以我們儘量對獲取到的資料進行判斷
我目前的幾個專案都是使用volley,取消請求的時候可以通過tag來取消,下面是取消請求的程式碼
/**
* 取消某個標示的所有請求,一般取消某個介面的所有請求
*
* @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;
}
});
}