안녕하세요 푸민입니다.
이어서 Volley 분석합니다!
NetworkResponse 객체는 네트워크 연결한 뒤의 결과 값이 들어 있는 개체입니다.
public class NetworkResponse {
public NetworkResponse(int statusCode, byte[] data, Map<String, String> headers, boolean notModified) {
this.statusCode = statusCode;
this.data = data;
this.headers = headers;
this.notModified = notModified;
}
public NetworkResponse(byte[] data) {
this(HttpStatus.SC_OK, data, Collections.<String, String>emptyMap(), false);
}
public NetworkResponse(byte[] data, Map<String, String> headers) {
this(HttpStatus.SC_OK, data, headers, false);
}
public final int statusCode;
public final byte[] data;
public final Map<String, String> headers;
public final boolean notModified;
}
멤버 변수로 가지고 있는 것이 Http 상태코드와 데이터 그리고 맵으로 헤더 값을 가지고 있습니다.
이제 알아볼 것은 실제로 이미지를 어떻게 가져오는지입니다. 이미지를 가져올 때 미리 생성했던 RequestQueue 에 ImageRequest 를 생성한 것을 add() 메소드를 이용해서 추가해줍니다.
public Request add(Request request) {
request.setRequestQueue(this);
synchronized (mCurrentRequests) {
mCurrentRequests.add(request);
}
request.setSequence(getSequenceNumber());
request.addMarker("add-to-queue");
if (!request.shouldCache()) {
mNetworkQueue.add(request);
return request;
}
synchronized (mWaitingRequests) {
String cacheKey = request.getCacheKey();
if (mWaitingRequests.containsKey(cacheKey)) {
Queue<Request> stagedRequests = mWaitingRequests.get(cacheKey);
if (stagedRequests == null) {
stagedRequests = new LinkedList<Request>();
}
stagedRequests.add(request);
mWaitingRequests.put(cacheKey, stagedRequests);
if (VolleyLog.DEBUG) {
VolleyLog.v("Request for cacheKey=%s is in flight, putting on hold.", cacheKey);
}
} else {
mWaitingRequests.put(cacheKey, null);
mCacheQueue.add(request);
}
return request;
}
}
위의 mCurrentRequests 는 HashSet<Request> 입니다. 여기에 추가를 해주고, getSequenceNumver() 에서 AutominiInteger 를 통해 seq를 설정하고, add-to-queue 라는 마커를 추가합니다.
그리고 캐쉬가 가능한지 확인후에 없다면 mNetworkQueue에 추가! 그 뒤 mWaitingRequests (Map 타입)에서 현재 캐시가 기다리고 있는지 확인 후 기다리고 있다면 꺼내서 LinkedList 에 추가해줍니다. 그러면 하나 끝날때마다 하나씩 계속 수행을 하겠죠? 그리고 기다리는 것이 없다면 바로 mCacheQueue 에 추가를 합니다.
'Development > Android' 카테고리의 다른 글
[안드로이드] Android Image Volley 분석6 (0) | 2015.09.22 |
---|---|
[안드로이드] Android Image Volley 분석5 (0) | 2015.09.19 |
[안드로이드] Android Image Volley 분석3 (0) | 2015.09.17 |
[안드로이드] Android Image Volley 분석 02 (0) | 2015.09.16 |
[안드로이드] Android Image Volley 분석 01 (0) | 2015.09.11 |
댓글