我有一个for循环,它创建了不同的url,然后我使用add函数推送Volley RequestQueue中的url。 我有一个问题,响应列表器是否会按照添加到RequestQueue的请求的顺序进行响应,或者它将是随机的,基于请求的服务器响应? 我正在使用VolleySingleton方法。
答案 0 :(得分:6)
Volley RequestQueue类管理异步请求队列。
这意味着Volley在FIFO(先进先出)模型上发送请求,但由于响应可能需要很长时间才能返回,因此它不会按特定顺序处理响应。 如果您希望在第二个请求中使用第一个请求的结果,则不能使用它。
但是,您可以明显地使用RequestFuture类在同步模型上使用Volley:
答案 1 :(得分:4)
默认情况下,Volley RequestQueue
将使用4个并发线程来处理添加到Requests
的{{1}}。这可以通过扩展Queue
类并将所需的线程池大小作为第三个参数传递给RequestQueue
构造函数来更改。
将1传递给构造函数将导致super
一次处理一个请求: - )
答案 2 :(得分:3)
答案 3 :(得分:1)
假设默认行为是在单独的并发线程上发送多个请求,那么响应的顺序将取决于每个单独请求的总响应时间。
至于识别响应(除了数据本身)之外,您似乎应该能够使用唯一的请求标识符(原始URL或int)实例化Response.Listener实现,以便在调用响应处理程序时能够区分原始请求。
public class JSONProcessor implements Response.Listener<JSONObject> {
private String url;
private int reqCode;
public JSONProcessor (String reqUrl) {
this.url = reqUrl
}
public JSONProcessor (int reqCode) {
this.reqCode = reqCode;
}
public void onResponse(JSONObject response) {
// use this.url or this.reqCode to determine original request
// process response
}
}
或者,为您希望处理的每个端点使用Response.Listener的不同实现。
总的来说,在我看来,如果可能的话,最好是完全由数据驱动。