Bir diฤer konu da datayฤฑ nasฤฑl alacaฤฤฑmฤฑz. Her seferinde servera gidilmeli mi, cachelenmeli mi? Eฤer cache’lenmeliyse nasฤฑl cachelenmeli?
Datayฤฑ cache’den okumak her seferinde servis รงaฤฤฑrmaktan tabi ki daha performanslฤฑdฤฑr. Eฤer sรผrekli kullanฤฑlacak bir dataysa bu datayฤฑ cihaza cachelemek รงok daha hฤฑzlฤฑ okunmasฤฑnฤฑ saฤlayabilir. Network’den bir dosya รงektiฤimizi ve bunu sonrasฤฑnda da kullandฤฑฤฤฑmฤฑzฤฑ dรผลรผnรผrsek cachelemek รงok mantฤฑklฤฑ bir รงรถzรผm.
Burada รถnrmli olan HTTP Responslarฤฑnฤฑn cachelenmesi default’da disable’dฤฑr. Http Responselarฤฑnฤฑ kullanarak cachelemek demek aslฤฑnda HttpResponseCache class’ฤฑnฤฑ kullanmak demektir.
@Override
protected void onCreate(Bundle savedInstanceState) {
ย ย super.onCreate(savedInstanceState);
…
ย ย try{
ย ย ย ย ย ย File httpCacheDir = new File(getBaseContext().getCacheDir(),“http”);
ย ย ย ย ย ย long httpCacheSize = 10*1024*1024; //10Mib
ย ย ย ย ย ย HttpResponseCache.install(httpCacheDir, httpCacheSize);
ย ย }catch (IOException e){
ย ย ย ย ย ย Log.i(TAG, “HTTP response cache installation failed.” + e.getMessage());
ย ย }
}
@Override
protected void onStop() {
ย ย super.onStop();
…
ย ย HttpResponseCache cache = HttpResponseCache.getInstalled();
ย ย if(null != cache){
ย ย ย ย ย ย cache.flush();
ย ย }
}
Ki bu da aslฤฑnda cihazda fiziksek storage iรงin bir lokasyon tanฤฑmlamamฤฑza izin verir. Bu alan cache iรงin ayrฤฑlarak max size kadar tanฤฑmlanฤฑr. Bir kere enabled edildiฤinde ise, tรผm Http Response’lar cachelenecektir. (dosya sisteminde) Bu tรผm API’lara, URL connection’lara uygulanฤฑr. Tabi library’lerinde yaptฤฑฤฤฑ tรผm requestler cachelenir.
Eฤer cachelenmemesi gereken bir request olursa, aลaฤฤฑdaki gibi kullanฤฑlabilir.
Eฤer data gelene kadar cache’den okuyup sonra refresh etmesi gereken bir durum olursa da aลaฤฤฑdaki gibi kullanฤฑlabilir.
Burada data cihazdan sadece 2 ลekilde kaldฤฑrฤฑlฤฑr.
- Cache tamamen dolduysa
- Cache kontrol Header’ฤฑna gรถre
HTTP 1.1 std server cihaza ne kadar sรผreyle cachelemesini gerektiฤini sรถylรผyor. 3 gรผn de olabilir hiรง cacheleme de diyebilir. Basit network iลlemlerinde ya da servera mรผdahale edebildiฤimizde bu faydalฤฑ bir kullanฤฑm.
Eฤer cache’i yรถnetemiyorsak ya da farklฤฑ bir cihazsa ve bu cihazda depolama yapamฤฑyorsak, bu durumda kendi cache รงรถzรผmรผmรผzรผ yazmamฤฑล gerekir.
Bu noktada sฤฑfฤฑrdan herลeyi yazmak zordur. DiskLRUCache.Javaย class’ฤฑndan faydalanฤฑlabilir. Ya da aลaฤฤฑdaki hazฤฑr library’lerden biri รงรถzรผm olarak kullanฤฑlabilir.
- Volley
- okHHTP
- Picasso
Picasso’nun kendi image cache mekanizmasฤฑ vardฤฑr.
Referanslar:
http://developer.android.com/reference/android/net/http/HttpResponseCache.html