Android应用开发框架Volley入门学习教程

2019-12-10 19:05:01王振洲

如果在一个Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,如果Activity被结束了,则我们需要写如下代码作为防守:

@Override public void onPostExecute(Result r) { 
  if (getActivity() == null) { 
    return; 
  } 
  // ... 
} 

Activity被终止之后,如果继续使用其中的Context等,除了无辜的浪费CPU,电池,网络等资源,有可能还会导致程序crash,所以,我们需要处理这种一场情况。

使用Volley的话,我们可以在Activity停止的时候,同时取消所有或部分未完成的网络请求。

Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。
比如,可以针对某些个request做取消操作:

@Override 
public void onStop() { 
  for (Request <?> req : mInFlightRequests) { 
    req.cancel(); 
  } 
  ... 
} 

或者,取消这个队列里的所有请求:

@Override pubic void onStop() { 
  mRequestQueue.cancelAll(this); 
  ... 
} 

也可以根据RequestFilter或者Tag来终止某些请求:

@Override public void onStop() { 
  mRequestQueue.cancelAll( new RequestFilter() {}) 
  ... 
  // or 
  mRequestQueue.cancelAll(new Object()); 
  ...