본문 바로가기
Development/Android

[안드로이드] Android Image Volley 분석3

by 푸민 2015. 9. 17.
반응형


안녕하세요 푸민입니다.

저번 시간까지 Volley 클래스를 이용하여 RequestQueue 를 생성하였습니다.

먼저 RequestQueue 를 만들면 그 다음에 할 일이 ImageRequest 를 생성하는 것입니다.



ImageRequest 는 설정을 하여 이미지를 요청하는 클래스인데요.


public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight, Config decodeConfig, Response.ErrorListener errorListener) {

super(Method.GET, url, errorListener);

setRetryPolicy(new DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIESIMAGE_BACKOFF_MULT));

mListener = listener;

mDecodeConfig = decodeConfig;

mMaxWidth = maxWidth;

mMaxHeight = maxHeight;

}


ImageRequest 의 생성자입니다.

첫 번째 인자로 연결하려는 서버 Uri

두 번째 인자는 서버에 연결하여 이미지를 받아온 뒤에 불러주는 리스너이고

세 번째 인자는 최대 가로 크기

네 번째 인자는 최대 세로 크기,

다섯 번째 인자는 Bitmap RGB 설정

마지막 인자는 실패했을 때 리스너입니다.


인자값이 상당히 많지만 하나하나 보면 간단해요!


public class ImageRequest extends Request<Bitmap> {

...

}


각 멤버 변수의 값을 설정하고 super 메소드를 호출하여 상속 받았던 Request 글래스의 생성자 또한 설정합니다.


static int findBestSampleSize(int actualWidth, int actualHeight, int desiredWidth, int desiredHeight){

}


private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary,int actualSecondary) {

}


위와 같이 사이즈를 조정하는 메소드도 있고


protected Response<Bitmap> parseNetworkResponse(NetworkResponse response) {

synchronized (sDecodeLock) {

try {

return doParse(response);

} catch (OutOfMemoryError e) {

return Response.error(new ParseError(e));

}

} 

}


결과값을 Response 객체로 변환하여 리스너를 불리게 해주는 메소드도 있습니다.

또 이 메소드는 결과를 받은 다음에 처리하는 것이라서 결과가 여러번 불리는 것을 방지하기 위해 synchronized (sDecodeLock) 를 이용하여 동기화로 묶어줬습니다.


private static final Object sDecodeLock = new Object();


eDecodeLock 은 동기화를 사용하기 위해서 쓴 별 의미 없는 클래스 같아요 ㅎ

반응형

댓글