Uygulama önbellek dizini, bir sonraki kullanımda yeniden oluşturulabilecek geçici verilerin depolandığı alandır. Android Developers, 2026'ya göre, bellek yetersiz olduğunda sistem bu dizindeki dosyaları uyarı vermeden silebilir, bu nedenle uygulama kritik önemdeki veriler için önbelleğin korunmasına güvenmemelidir. Önbellek dizininin doğru kullanımı, kaplanan alanı azaltır ve içerik yüklemeyi hızlandırır.
Önemli Noktalar
context.cacheDir ve context.externalCacheDir sağlarNSCachesDirectory'yi kullanırÖnbellek dizini, geçici dosyalar için tasarlanmış, uygulamanın dahili (veya harici) belleğindeki özel bir dizindir. Internal Storage'dan temel farkı: cihazda boş alan az olduğunda sistem, bildirimde bulunmadan önbellekteki dosyaları silme hakkına sahiptir. Bu nedenle uygulama, önemli kullanıcı verilerinin tek kopyasını asla önbellekte saklamamalıdır. Önbellek, indirilen görseller, sunucu yanıtları, önceden derlenmiş kaynaklar ve uzaktan geri yüklenebilen veya programatik olarak yeniden oluşturulabilen diğer veriler için idealdir.
Android'de önbellek dizini /data/data/<package>/cache/ konumunda bulunur ve context.cacheDir ile erişilebilir. Önbellek boyutu açıkça sınırlandırılmamıştır, ancak Google Play 100 MB'ı aşmamayı önerir, çünkü büyük önbelleğe sahip uygulamalar kullanıcılardan olumsuz değerlendirmeler alır. iOS'ta önbellek dizini, Sandbox kapsayıcısı içinde Library/Caches/ konumunda bulunur ve NSCachesDirectory ile erişilebilir. iOS, cihaz bir yedekten geri yüklenirken veya kritik düzeyde alan yetersizliğinde Caches'teki dosyaları silebilir — bu konuda kullanıcılar uygulama belgelerinde bilgilendirilmelidir.
Hangi verilerin güvenle önbelleğe yerleştirilebileceğini ve hangilerinin Internal Storage veya Documents'ta saklanması gerektiğini anlamak, önemli bir geliştirici becerisidir. Yanlış önbellek kullanımı iki zıt soruna yol açar: ya uygulama çok fazla yer kaplar (geliştirici Documents'ta olması gerekeni önbellekte saklarsa) ya da kullanıcı veri kaybeder (geliştirici kalıcı olarak saklanması gerekeni önbellekte saklarsa). Basit bir kural izleyin: veriler kurtarılabiliyorsa — önbellek, kurtarma imkansızsa — Internal Storage veya Documents.
Farklı veri türleri farklı yeniden oluşturma hızına ve depolama gereksinimlerine sahiptir. Bu özellikleri anlamak, geliştiricinin hangi dosyaları önbelleğe, hangilerini kalıcı depolamaya koyacağını doğru seçmesine yardımcı olur.
En yaygın önbellek verisi türü, ağdan indirilen görsellerdir. Glide, Picasso ve Coil gibi kütüphaneler, indirilen görselleri otomatik olarak uygulamanın önbellek dizinine kaydeder. Sosyal uygulamalarda görsel önbelleğinin tipik boyutu 50 ila 200 MB arasındadır. Önbellek boyutu, cihazın ekran çözünürlüğüne ve görüntülenen içerik miktarına bağlıdır. Glide, iki seviyeli önbellekleme kullanır: önce RAM'deki L1 önbelleğini (LRU algoritması), ardından diskteki L2 önbelleğini kontrol eder. Bu, ek bir ağ isteği olmadan tekrar tekrar görüntülenen görsellerin hızlı yüklenmesini sağlar. DiskCacheStrategy ile maksimum disk önbelleği boyutunu yapılandırmak, kaplanan alanı kontrol etmeye olanak tanır: sınır aşıldığında, kütüphane otomatik olarak en az kullanılan dosyaları siler.
val cacheDir = File(context.cacheDir, "image_cache")
val maxSize = 50 * 1024 * 1024 // 50 MB
val cache = DiskLruCache.open(cacheDir, 1, 1, maxSize)
cache.edit("key")?.let { editor ->
editor.newOutputStream(0).use { stream ->
// verileri önbelleğe yazma
}
}
API isteklerinin yanıtları, çevrimdışı erişim ve sunucu yükünü azaltmak için önbelleğe alınabilir. OkHttp, Cache sınıfı aracılığıyla yerleşik önbellekleme desteği sağlar. Cache-Control ve ETag yanıt başlıkları önbellek politikasını yönetir: sunucu, yanıtın ne kadar süre geçerli kabul edileceğini belirtir. Doğru yapılandırmayla, ağ isteği önbelleği tekrarlanan ziyaretlerde veri yükleme süresini %60–80 oranında azaltabilir ve internet bağlantısı olmadan temel uygulama işlevselliği sağlayabilir. Ağ isteği önbelleğinin boyutu nadiren 10–20 MB'ı aşar, ancak yoğun kullanımda 50 MB'a ulaşabilir. OkHttpClient.Builder yapıcısı aracılığıyla maksimum önbellek boyutunu yapılandırın ve her uygulama başlatılışında önbelleğe alınan verilerin geçerliliğini kontrol edin.
SQLite veritabanları çalışma sırasında geçici dosyalar oluşturabilir: WAL dosyaları (Write-Ahead Log), geri alma günlükleri ve dizin sayfaları. Bu dosyalar ana veritabanının yanında saklanır, ancak geçici veritabanları (örneğin, tam metin arama veya analitik) için önbellek dizininde konum belirtilebilir. Önceden derlenmiş OpenGL ve Vulkan shader programları da bu dizinde önbelleğe alınır ve grafik sahnelerinin ilk yüklenmesini hızlandırır. iOS'ta NSCachesDirectory, önceden derlenmiş Core Data ve geçici görsel işleme dosyalarının saklanması için önerilir.
Önbellek temizliği otomatik (sistem tarafından) veya manuel (kullanıcı veya uygulama tarafından) gerçekleşebilir. Farklı senaryolarda sistem davranışını anlamak, veri kaybını önlemek için gereklidir.
Android'de sistem, /data bölümündeki boş alan kritik bir eşiğin (genellikle 500 MB) altına düştüğünde önbellek temizleme işlemini başlatır. cacheflush işlemi, yüklü tüm uygulamaların önbellek boyutunu analiz eder ve en eskilerinden başlayarak en az kullanılan dosyaları siler. Kullanıcı ayrıca sistem ayarları aracılığıyla tüm uygulamaların önbelleğini manuel olarak temizleyebilir: “Ayarlar → Depolama → Önbellek → Önbelleği temizle.” iOS'ta otomatik Caches temizliği, cihaz bir yedekten geri yüklenirken gerçekleşir — iOS, Library/Caches/ içeriğini geri yüklemez. Ayrıca iOS, boş alan tükendiğinde, yalıtılmış veriler için temizlenebilir depolama mekanizmasını kullanarak Caches'teki dosyaları seçici olarak silebilir.
let fm = FileManager.default
let cachesURL = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
let contents = try fm.contentsOfDirectory(
at: cachesURL,
includingPropertiesForKeys: nil
)
for fileURL in contents {
try fm.removeItem(at: fileURL)
}
Geliştirici, kullanıcı talebi üzerine veya bir programa göre programatik önbellek temizliği uygulayabilir. Android'de, uygulamanın kendi önbelleğini temizlemek için context.cacheDir ve context.externalCacheDir içindeki tüm dosyaları silmek yeterlidir. iOS'ta Library/Caches/ içeriğini temizleyin ancak dizinin kendisini silmeyin — yalnızca içeriğini temizleyin. Uygulama ayarlarında kullanıcıya geçerli önbellek boyutunu ve onay ile birlikte “Önbelleği temizle” düğmesini göstermeniz önerilir. Google Play Console'a göre, önbellek temizleme düğmesi olan uygulamalar, bu özelliği olmayan uygulamalara kıyasla alan yetersizliğiyle ilgili %22 daha az şikayet alır. Önbellek temizliği güvenli olmalıdır: uygulama, önbelleğe alınan dosyaların silindiği durumu doğru şekilde işlemeli ve bir sonraki erişimde bunları şeffaf bir şekilde yeniden yüklemelidir.
Aynı amaca rağmen, Android ve iOS'ta önbellek dizinlerinin uygulanması önemli farklılıklar gösterir. Geliştiricinin, uygulamanın her iki platformda da doğru çalışması için bunları dikkate alması gerekir.
| Özellik | Android | iOS |
|---|---|---|
| Varsayılan yol | /data/data/<package>/cache/ | Library/Caches/ |
| Erişim API'si | context.cacheDir | NSCachesDirectory |
| Harici önbellek | context.externalCacheDir | Yok |
| Yedekleme | Yedeklenmez | Yedeklenmez |
| Sistem temizliği | Alan yetersiz olduğunda | Yedekten geri yüklemede ve alan yetersiz olduğunda |
| Kullanıcı görünürlüğü | Uygulama ayarlarında | Yalnızca bilgisayara bağlandığında |
Android, context.externalCacheDir aracılığıyla ayrı bir harici önbellek dizini sağlar — SD kartta bulunur (takılıysa) ve uygulama kaldırıldığında silinmez. Bu, büyük medya dosyaları için uygundur, ancak hafıza kartında çöp bırakma riski oluşturur. iOS'un harici önbellek kavramı yoktur: tüm geçici dosyalar Sandbox kapsayıcısı içinde saklanır ve kaldırma sırasında garantili olarak silinir. Android'de önbellek, uygulama ayarlarında kullanıcıya görünür ve kullanıcı onu manuel olarak temizleyebilir. iOS'ta sistem ayarları, bireysel uygulamaların önbellek boyutunu göstermez — geliştirici arayüze bir temizleme düğmesi eklemediği sürece kullanıcı, önbelleği yalnızca uygulamayı silip yeniden yükleyerek temizleyebilir.
Önemli bir fark — geri yükleme sırasındaki davranıştır. iOS'ta, iTunes veya iCloud yedeklemesinden geri yüklerken Caches dizini geri yüklenmez, çünkü iOS önbelleğe alınan verilerin ilk başlatmada yeniden oluşturulacağını varsayar. Android'de, Google Drive'dan geri yüklerken yalnızca Internal Storage yedeklenir — geri yüklemeden sonra önbellek boş kalır. Her iki durumda da uygulama, boş bir önbellekle doğru şekilde çalışmalı, kullanıcıya hata göstermemeli veya işlevsellik kaybetmemelidir.
Doğru önbellek yönetimi, kullanıcı deneyimini ve uygulama puanını etkileyen faktörlerden biridir. Aşağıdaki öneriler, tipik sorunları önlemeye ve kullanıcı memnuniyetini artırmaya yardımcı olacaktır.
context.externalCacheDir null döndürebilir. Her zaman dahili önbelleğe bir geri dönüş sağlayınUygulama analitiğinde önbellek boyutunu düzenli olarak izleyin. Firebase Analytics veya benzer bir sisteme önbellek boyutu metriği raporlamasını entegre edin. Ortalama önbellek boyutu 100 MB'ı aşarsa, önbellekleme stratejisini optimize edin: nadiren kullanılan veriler için TTL'yi azaltın, önbelleklemeden önce görsel sıkıştırma uygulayın (PNG yerine WebP, JPEG kalitesini %85'e düşürün), sunucudan içerik yüklemek için sayfalama kullanın. 16–32 GB cihazlara sahip kullanıcıların uygulama boyutuna özellikle duyarlı olduğunu unutmayın: önbellek 200 MB'a ulaştığında, birçok kullanıcı onu temizlemenin bir yolunu aramaya başlar veya uygulamayı tamamen siler. Google anketine göre, kullanıcıların %38'i kontrolsüz önbellek büyümesi ve alan tüketimi nedeniyle en az bir uygulamayı silmiştir.
Sıkça Sorulan Sorular
Hayır, önbelleği temizlemek yalnızca geçici dosyaları (kaydedilmiş görseller, sunucu yanıtları) kaldırır. Kullanıcı verileri (şifreler, ayarlar, veritabanları) Internal Storage'da saklanır ve önbellek temizliğinden etkilenmez.
Google Play 100 MB'ı aşmamayı önerir. Yoğun medya içeriğine sahip uygulamalar (sosyal ağlar, mesajlaşma) için, otomatik temizlik uygulanması ve ayrı bir önbellek aracılığıyla sınır yapılandırılması koşuluyla 200 MB'a kadar kabul edilebilir.
Evet, iOS alan yetersiz olduğunda veya bir yedekten geri yüklerken Library/Caches dosyalarını silebilir. Sistem, kritik olmayan verilerin otomatik temizliği için temizlenebilir depolama mekanizmasını kullanır.
cacheDir cihazın dahili belleğinde bulunur ve uygulama kaldırıldığında silinir. externalCacheDir SD kartta bulunur ve kaldırma işleminden sonra kalabilir — yeniden yüklemeden sonraki ilk başlatmada kod aracılığıyla manuel olarak temizlenmelidir.
Glide, Picasso ve Coil gibi kütüphaneler iki seviyeli önbellekleme kullanır: L1 — RAM (anında erişim için LRU önbelleği), L2 — disk (uygulama önbellek dizini). Disk önbelleği, yapılandırılabilir bir boyut sınırına ve eski dosyaları kaldırma politikasına sahiptir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun