[Android]Volley源码分析(二)

时间:2023-03-08 16:25:20
[Android]Volley源码分析(二)

上一篇介绍了Volley的使用,主要接触了Request与RequestQueue这两个类,这篇就来了解一下这两个类的具体实现。

Request类图:

aaarticlea/png;base64,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" alt="" />

Request类: Request是一个抽象类,其中的主要属性:

mMethod: 请求方法,目前支持GET, POST, PUT, DELETE, HEAD, OPTIONS,TRACE, PATCH方法

mUrl: 请求Url

mErrorListener: 错误处理监听器,请求出错时调用

mSequence: 请求的序号,相同优先级的请求在请求队列中根据序号来进行排序,序号低的排在队列前面。

mRequestQueue: 该请求所在的请求队列

mCacheEntry: When a request can be retrieved from cache but must be refreshed from the network, the cache entry will be stored here so that in the event of a "Not Modified" response, we can be sure it hasn't been evicted from cache.

mRetryPolicy: 请求的重试策略

mShouldCache: 该请求的响应是否被缓存

mCanceled: 该请求是否能被取消

mResponseDelivered: 请求的响应是否已经交付。

另外还有一个mTag属性,用来标记Request,可以在RequestQueue中根据tag来批量取消Request。

主要方法包括:

getBody(): 返回请求体的字节数组表示。默认实现为返回null,所以如果是POST或PUT请求,子类需要重写这个方法。

parseNetworkResponse() 与deliverResponse()为抽象方法,由子类实现。parseNetworkResponse用来解析原始的响应信息,并返回一个特定的响应类型即Response<T>中的T类型结果。deliverResponse用来将解析好的响应结果交付给监听器进行处理。

默认情况下,Request的Priority都是Normal,如下源码:

 /**
* Priority values. Requests will be processed from higher priorities to
* lower priorities, in FIFO order.
*/
public enum Priority {
LOW,
NORMAL,
HIGH,
IMMEDIATE
} /**
* Returns the {@link Priority} of this request; {@link Priority#NORMAL} by default.
*/
public Priority getPriority() {
return Priority.NORMAL;
}

Request实现Comparable接口来对Request的优先级进行比较,从而决定Request在队列中的顺序。优先级越高,在请求队列中排得越前,相同优先级的序号越低,排得越前。

 /**
* Our comparator sorts from high to low priority, and secondarily by
* sequence number to provide FIFO ordering.
*/
@Override
public int compareTo(Request<T> other) {
Priority left = this.getPriority();
Priority right = other.getPriority(); // High-priority requests are "lesser" so they are sorted to the front.
// Equal priorities are sorted by sequence number to provide FIFO ordering.
return left == right ?
this.mSequence - other.mSequence :
right.ordinal() - left.ordinal();
}

Request派生出三个子类JsonRequest、ImageRequest、ClearCacheRequest。其中

1. JsonRequest<T>也是一个抽象类,可以发送一个Json表示的请求体,并返回一个T类型的响应,主要包括

mListener: 请求成功的监听器

mRequestBody:请求体的Json字符串表示。

parseNetworkResponse()仍为抽象方法,getBody()返回mRequestBody的字节数组。deliverResponse中调用mListener的onResponse方法,该方法由用户自己定义。参考上篇。

  @Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}

JsonArrayRequest、JsonObjectRequest继承自JsonRequest,分别表示返回一个JsonArray响应的请求与返回一个JsonObject响应的请求。JsonArrayRequest的parseNetworkResponse实现,JsonObjectRequest与之类似,不同的是返回JSONObject类型的响应,而不是JSONArray

 @Override
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString =
new String(response.data, HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONArray(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}

2. ImageRequest 用来根据一个URL来请求一个位图Bitmap,包括属性

mListene:用来接收经过解码的位图的监听器

mMaxWidth: 解码位图的最大宽度,

mMaxHeight:解码位图的最大高度

如果mMaxWidth,mMaxHeight都为0,则保持位图的原始尺寸,如果其中一个不为0,则按照原始位图的宽高比进行解码,如果都不为0, 则将解码成最适合width x height区域并且保持原始位图宽高比的位图。

ImageRequest的优先级是最低的。

 @Override
public Priority getPriority() {
return Priority.LOW;
}

3. ClearCacheRequest 一个模拟的用来清理缓存的请求

mCache:需要清理的缓存

mCallback:缓存清理完后在主线程中被调用的回调接口。

parseNetworkResponse与deliverResponse都是空实现,因为这是一个模拟的Request,没有实际的网络请求。

ClearCacheRequest的优先级是最高的。

 @Override
public Priority getPriority() {
return Priority.IMMEDIATE;
}

不早了,今天先到这。明天继续。