안녕하세요 푸민입니다.
안드로이드에서 권장하는 이미지 Api인 Volley 에 대해서 한번 분석해보겠습니다.
먼저 Volley 를 사용할 때는 RequestQueue 를 생성합니다. RequestQueue 를 생성할때 Volley 클래스의 newRequestQueue 메소드를 사용합니다.
public class Volley {
private static final String DEFAULT_CACHE_DIR = "volley";
public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
String userAgent = "volley/0";
try {
String packageName = context.getPackageName();
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
userAgent = packageName + "/" + info.versionCode;
} catch (NameNotFoundException e) {
}
if (stack == null) {
if (Build.VERSION.SDK_INT >= 9) {
stack = new HurlStack();
} else {
stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
Network network = new BasicNetwork(stack);
RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
queue.start();
return queue;
}
public static RequestQueue newRequestQueue(Context context) {
return newRequestQueue(context, null);
}
}
위의 Volley 클래스를 보면 SDK 버전에 따라서 둘로 나뉘는 것을 확인할 수 있습니다. 9 버전 이상일 경우 HurlStack 클래스를, 미만일 경우 HttpClientStack 을 사용합니다. HttpClientStack 에서는 HttpGet, HttpPost 등 클래스를 이용하여 접속하고, HurlStack 에서는 HttpUrlConnection 클래스를 이용합니다.
이것을 나누는 이유가 있는데요. HttpPost와 HttpGet 등 HttpClient 같은 경우 원래 Apache 의 소스였고, 이것을 안드로이드가 들고와서 사용하는데 하위 버전과의 호환성 때문에 Apache의 HttpClient의 최신 버전을 따라가지 않는다고 합니다. 그에 비해 HttpConnection 같은 경우 하위 버전에서는 오류가 많았지만 계속 업데이트가 되어 9 버전 즉 진저브레드 이상부터 사용하기 좋아졌다고 합니다.
그리고 DickBasedCache 라는 클래스가 있습니다.
public class DiskBasedCache implements Cache {
private final Map<String, CacheHeader> mEntries = new LinkedHashMap<String, CacheHeader>(16, .75f, true);
private long mTotalSize = 0;
private final File mRootDirectory;
private final int mMaxCacheSizeInBytes;
private static final int DEFAULT_DISK_USAGE_BYTES = 5 * 1024 * 1024;
private static final float HYSTERESIS_FACTOR = 0.9f;
private static final int CACHE_MAGIC = 0x20120504;
public DiskBasedCache(File rootDirectory, int maxCacheSizeInBytes) {
mRootDirectory = rootDirectory;
mMaxCacheSizeInBytes = maxCacheSizeInBytes;
}
public DiskBasedCache(File rootDirectory) {
this(rootDirectory, DEFAULT_DISK_USAGE_BYTES);
}
…
}
위의 소스를 보시면 파일을 생성하고 DickCache 를하고 또 LinkedHashMap 을 이용하여 MemoryCache를 합니다. 즉 우리가 설정만 잘해준다면 따로 캐싱처리와 이미지 저장을 안해도 되는것이지요!
'Development > Android' 카테고리의 다른 글
[안드로이드] Android Image Volley 분석3 (0) | 2015.09.17 |
---|---|
[안드로이드] Android Image Volley 분석 02 (0) | 2015.09.16 |
[안드로이드] Font 적용하기 (0) | 2015.09.10 |
[안드로이드] 이미지 슬라이딩, Flip 효과 (2) | 2015.09.09 |
[안드로이드] 이미지 포커스 효과, KenBurns 효과! (0) | 2015.09.08 |
댓글