當Activity關閉後,網絡請求回調的處理

當咱們在使用網絡請求的時候,通常都是經過回調來獲取請求到的數據。對於網絡請求的回調須要注意的幾個點服務器

  1. 好比咱們的回調在Activity中處理數據,當咱們把Activity關閉後,若是獲取到數據時,就算咱們的Activity被finish回調仍是會執行,那麼這個時候咱們在回調裏所作的一些操做,極可能會形成程序的錯誤。因此咱們須要在回調的時候判斷下Activity是否finish.網絡

    isFinishing()//判斷當前的Activity是否關閉,若是活動結束,返回true,不然返回false。
  2. 在一個Activity或Fragment發起網絡請求的時候,當咱們關閉界面後,須要把發出的請求給取消掉,也就是說當咱們發出一個請求的時候,數據尚未獲取到咱們又進入了新的界面,發起了一個新的請求,當請求多起來的時候就會出現阻塞的現象,好比:年級篩選,商品分類等這些請求都是會出現這種狀況的app

  3. 這裏說下不少的時候別太相信服務器返回的數據,反正我是被坑過,因此咱們儘可能對獲取到的數據進行判斷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;
            }
        });
    }
相關文章
相關標籤/搜索