Mobil Programlama

Android

Gereksiz Veri İndirmekten Kaçınmak

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Veri indirme miktarınızı azaltmanın temel yolu, sadece ihtiyacınız olan verileri indirmektir. Bunu sağlamak için de veri sorgusunu yaparken sorgu koşullarını en son güncelleme aldığınız zaman gibi kriterlere göre belirleyen REST API'ler yazabilirsiniz.

Örneğin bir resmi indirirken boyutunu sunucu (server) tarafında küçültmek, gerçek boyutunda indirip istemci (client) tarafında küçültmekten daha iyi bir seçenektir.

 

Verileri yerel önbellekte saklamak

Bir diğer önemli yol ise aynı veriyi tekrar tekrar indirmekten kaçınmaktır. Bunu sert önbellek saklaması (aggresive caching) ile sağlayabilirsiniz. Tam boyutlu resimler gibi anlık indirmeleri de içeren statik kaynakları mümkün olan en uzun süreyle önbellekte saklayın. Anlık önbellek saklamanızı düzenli olarak temizleyip büyüklüğünü ayarlayabilmeniz için anlık kaynaklarınızı her zaman ayrı saklayın.

Önbelleğinizin uygulamanızda gösterilen verilerin güncelliğini kaybetmesine sebep olmadığına emin olun. HTTP cevabınızın başlığından gösterilen veriye ne zaman erişildiğine, verinin en son ne zaman güncellendiğine ve ne zaman güncelliğini kaybedeceğine ulaşabilirsiniz. Bu sayede gösterdiğiniz verilerin ne zaman güncellenmesi gerektiğine karar verebilirsiniz.


long currentTime = System.currentTimeMillis());

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

long expires = conn.getHeaderFieldDate("Expires", currentTime);
long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);

setDataExpirationDate(expires);

if (lastModified < lastUpdateTime) {
  // Skip update
} else {
  // Parse update
}

Bu tekniği kullanarak dinamik içeriği de en etkili biçimde önebelleğinizde saklayabilirsiniz.

Hassas olmayan verileri, yönetilmeyen harici bir önbellekte tutabilirsiniz.

 

 Context.getExternalCacheDir(); 

 

Alternatif olarak, yönetilen başka bir deyişle güvenli uygulama önbelleklerini kullanabilirsiniz. Unutmayınız ki bu dâhili önbellek, sistem mevcut hafızada düşük hızda çalıştığı zaman sıfırlanabilir.

 

 Context.getCacheDir(); 

 

 

HttpURLConnection yanıt önbelleğinin kullanımı

Android 4.0.'da HttpURLConnection'a yanıt önbelleği (response cache) eklendi. Desteklenen cihazlarda HTTP yanıt önbelleğini aşağıdaki şekilde kullanabilirsiniz:


private void enableHttpResponseCache() {
  try {
    long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
    File httpCacheDir = new File(getCacheDir(), "http");
    Class.forName("android.net.http.HttpResponseCache")
         .getMethod("install", File.class, long.class)
         .invoke(null, httpCacheDir, httpCacheSize);
  } catch (Exception httpResponseCacheNotAvailable) {
    Log.d(TAG, "HTTP response cache is unavailable.");
  }
}

Bu kod parçası, Android 4.0. ve daha yeni sürüm cihazlarda yanıt önbelleğini aktif hale getirecektir.

Yüklenen önbellek sayesinde tamamen saklanmış HTTP istekleri, doğrudan yerel hafızadan bir ağ bağlantısına gerek duymadan getirilebilir. Önbellekte koşullara uygun saklanmış cevaplar ise güncelliklerini herhangi bir veri aralığı harcamasına gerek kalmadan sunucudan kontrol edebilirler.

Erişilemeyen cevaplar ise yanıt önbelleğinde ilerisi için saklanır.

 

Bu sayfadaki metinler Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.

Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Redundant Downloads are Redundant