1. 程式人生 > >當Activity關閉後,網路請求回撥的處理

當Activity關閉後,網路請求回撥的處理

當我們在使用網路請求的時候,一般都是通過回撥來獲取請求到的資料。對於網路請求的回撥需要注意的幾個點

  1. 比如我們的回撥在Activity中處理資料,當我們把Activity關閉後,如果獲取到資料時,就算我們的Activity被finish回撥還是會執行,那麼這個時候我們在回撥裡所做的一些操作,很可能會造成程式的錯誤。所以我們需要在回撥的時候判斷下Activity是否finish.

    isFinishing()//判斷當前的Activity是否關閉,如果活動結束,返回true,否則返回false。
  2. 在一個Activity或Fragment發起網路請求的時候,當我們關閉介面後,需要把發出的請求給取消掉,也就是說當我們發出一個請求的時候,資料還沒有獲取到我們又進入了新的介面,發起了一個新的請求,當請求多起來的時候就會出現阻塞的現象,比如:年級篩選,商品分類等這些請求都是會出現這種情況的

  3. 這裡說下很多的時候別太相信伺服器返回的資料,反正我是被坑過,所以我們儘量對獲取到的資料進行判斷

我目前的幾個專案都是使用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; } }); }