Uygulama Dahili Depolaması: Nedir, Veri Depolama Yöntemleri ve Geliştirmede Nasıl Çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-13 Okuma süresi: 11 dk

Uygulama dahili depolaması, cihazda yalnızca belirli bir uygulamanın izole depolama aracılığıyla erişebildiği özel bir alandır. Android Developers, 2026'ya göre, her uygulama diğer uygulamaların doğrudan erişemediği kendi sanal alan dizinini alır. Bu yaklaşım, verileri yetkisiz okumalara karşı korur ve mobil cihazların çoklu görev ortamında kararlı çalışmayı sağlar.

Önemli Noktalar

  • Internal Storage — her uygulamanın izole depolaması, diğer programlar tarafından erişilemez
  • Sandbox modeli, bir uygulamanın verilerinin özel izinler olmadan başka bir uygulama tarafından okunamamasını sağlar
  • Android, dahili depolamaya erişim için Context.getFilesDir(), getCacheDir() ve getDataDir() sağlar
  • iOS, uygulama Sandbox kapsayıcısında NSDocumentDirectory ve NSCachesDirectory kullanır
  • Otomatik temizlik, uygulama kaldırıldığında dahili depolamadaki tüm verilerin tamamen silinmesini garanti eder

Uygulama Dahili Depolaması Nedir?

Uygulama dahili depolaması, işletim sisteminin kurulum sırasında her uygulamaya tahsis ettiği izole bir dizindir. Diğer uygulamalar ve kullanıcı, standart dosya yöneticileri aracılığıyla bu dizine erişemez. Sistem, uygulama kaldırıldığında bu dizin içindeki tüm verilerin tamamen silineceğini garanti eder. Bu yaklaşım, mobil işletim sistemleri güvenlik modelinin temelini oluşturur ve programlar arasında gizli bilgi sızıntısını önler.

Harici depolamadan (SD kart) farklı olarak, dahili depolama her zaman kullanılabilir ve ortam varlığını kontrol etme gerektirmez. Modern cihazlardaki NAND flaş bellek okuma ve yazma hızları, sıralı okumada 800–900 MB/s ve sıralı yazmada 200–300 MB/s'ye ulaşır ve SATA SSD'lerle karşılaştırılabilir. Ayrılan alanın boyutu, cihazın toplam kapasitesine ve üretici politikasına bağlıdır: 64 GB flaş belleğe sahip cihazlarda, uygulama gerektiğinde genişletilebilen 16 ila 64 MB başlangıç alanı alır.

Dahili depolama mimarisi Android ve iOS arasında farklılık gösterir. Android'te, her uygulama bir /data/data/<package_name>/ dizini alır ve sistem bunun içinde files/, cache/ ve databases/ alt dizinlerini oluşturur. iOS'te, uygulama Documents/, Library/ ve tmp/ dizinlerine sahip bir Sandbox kapsayıcısında çalışır ve her birinin kendi amacı ve yedekleme politikası vardır.

Dahili Bellekte Veri Depolama Yöntemleri

Geliştiriciler, uygulama dahili depolamasında veri kaydetmek için birkaç yönteme erişebilir. Her yöntem belirli bir görevi çözer ve belirli bir veri türü için uygundur. Doğru yöntemi seçmek, uygulama performansını, geliştirme kolaylığını ve kullanıcı veri güvenliğini doğrudan etkiler.

İzole Dosya Depolama

En düşük seviyeli yöntem, dosya dizinine doğrudan dosya yazmaktır. Bir uygulama, sanal alanı içinde herhangi bir dosya ve dizin oluşturabilir. Bu yöntem, medya dosyalarını, kullanıcı belgelerini ve yapılandırılmış organizasyon gerektirmeyen herhangi bir ikili veriyi depolamak için uygundur. Android'te, dizine Context.getFilesDir() çağrısıyla erişilir ve bu, uygulamanın dosya dizininin mutlak yolunu döndürür. iOS'te, NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) işlevi benzer bir amaca hizmet eder.

SharedPreferences ve DataStore

Anahtar-değer çiftlerini depolamak için Android, SharedPreferences ve Kotlin eşyordamları ve protobuf protokolüne dayalı daha modern DataStore sunar. SharedPreferences, verileri /data/data/<package>/shared_prefs/ dizini içindeki bir XML dosyasında depolar. Kullanım kolaylığına rağmen, SharedPreferences'ın dezavantajları vardır: senkron yazma UI iş parçacığında gecikmelere neden olabilir ve tür güvenliği eksikliği hata riskini artırır. DataStore, Flow tabanlı asenkron API ve protobuf şemaları aracılığıyla tam tür desteği sağlayarak bu sorunları çözer.

SQLite Veritabanı ve Room

İlişkisel bağlantılara sahip yapılandırılmış veriler için SQLite veya Room sarmalayıcısı en uygun seçimdir. Veritabanı, databases/ dizini içinde tek bir dosyada depolanır ve tam SQL sözdizimini destekler. Room, tür güvenli API, otomatik şema geçişi ve eşyordam desteği sağlayan resmi bir Jetpack kütüphanesidir. Doğru indeksleme ile veritabanı boyutu, önemli performans kaybı olmadan birkaç gigabayta ulaşabilir. Mobil cihazlarda SQLite, modern bir amiral gemisi işlemcide saniyede 50.000 yazma işlemi gerçekleştirebilir.

EncryptedSharedPreferences

Kimlik doğrulama belirteçleri ve şifreleme anahtarları gibi gizli verileri depolamak için Android, EncryptedSharedPreferences sağlar. Standart SharedPreferences üzerindeki bu sarmalayıcı, AES256-GCM-None kullanarak anahtarları ve değerleri otomatik olarak şifreler. Şifreleme, diske yazılmadan önce dosya düzeyinde gerçekleştirilir, bu nedenle cihaza fiziksel erişim olsa bile bir saldırgan içeriği okuyamaz. EncryptedSharedPreferences, tüm dosyaları şifrelemek için EncryptedFile'ı da içeren AndroidX Security kütüphanesinin bir parçasıdır.

Android'te Dahili Depolama ile Nasıl Çalışılır

Android SDK, Context sınıfı aracılığıyla dahili depolama ile çalışmak için bir dizi yöntem sağlar. Her yöntem, uygulama sanal alanı içinde belirli bir sistem dizinine bir yol döndürür. Kotlin örneğini kullanarak temel dosya yazma ve okuma işlemlerini inceleyelim.

Context Aracılığıyla filesDir'e Erişim

Dahili dosya dizinine giden yolu almanın ana yöntemi context.filesDir'dir. /data/data/<package>/files/ dizinini gösteren bir File nesnesi döndürür. İlk erişimde, sistem gerekli tüm üst dizinleri otomatik olarak oluşturur. Dahili depolamadaki dosya boyutları açıkça sınırlandırılmamıştır, ancak toplam veri hacmi, genellikle toplam flaş bellek kapasitesinin %60–80'ini oluşturan /data bölümündeki kullanılabilir alanı aşmamalıdır.

kotlin
val context = getApplicationContext()
val file = File(context.filesDir, "notes.txt")

file.writeText("Not içeriği")

val content = file.readText()
println("Okundu: $content")

writeText ve readText yöntemleri, Kotlin standart kütüphanesinin genişletme işlevleridir. Akışların açılmasını ve kapatılmasını otomatik olarak yöneterek bellek sızıntılarını önlerler. İkili veriler için, kodlama gerektirmeyen ve ByteArray dizileriyle çalışan writeBytes ve readBytes'i kullanın. Büyük dosyalarla çalışırken, arabelleğe alınmış akışların kullanılması önerilir: metin için BufferedReader ve BufferedWriter, ikili veriler için BufferedInputStream ve BufferedOutputStream.

Dahili Depolamada Alt Dizin Oluşturma

Dosyaları bir hiyerarşi halinde düzenlemek için filesDir içinde alt dizinler oluşturun. Bu, verileri türe göre yapılandırmaya yardımcı olur: resimler, belgeler, dışa aktarma dosyaları. mkdirs() yöntemi, iç içe geçmiş olanlar da dahil olmak üzere yoldaki tüm eksik dizinleri oluşturur. Oluşturma işleminin başarılı olduğundan emin olun — yöntem yalnızca yeni dizinler oluşturulduğunda true döndürür. Oluşturma hataları çoğunlukla /data bölümünde yetersiz alan veya dosya sistemi düğümlerinin tükenmesiyle ilgilidir.

kotlin
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
    println("Dizin oluşturuldu")
}

val imageFile = File(imagesDir, "photo.jpg")
imageFile.writeBytes(byteArray)

Büyük dosyaları yazmadan önce kullanılabilir alanı kontrol etmek için File.getFreeSpace() veya File.getUsableSpace() kullanın. İkinci yöntem, güvenlik kotalarını dikkate alarak geçerli uygulama için kullanılabilir bayt sayısını döndürür — çok kullanıcılı cihazlar bağlamında daha doğrudur. Kullanılabilir alan beklenen dosya boyutundan küçükse, kullanıcıya bir mesaj gösterin ve cihaz ayarlarında alan boşaltmayı önerin.

iOS'te Dahili Depolama ile Nasıl Çalışılır

iOS'te, her uygulama izole bir Sandbox kapsayıcısında çalışır. Sistem, özel yetkiler olmadan sınırlarının dışına çıkmak için bir API sağlamaz. Dosya sistemiyle çalışmak için ana araç, Foundation framework'ünün FileManager sınıfıdır. Sandbox kapsayıcısı, her biri kendi yedekleme politikasına sahip birkaç standart dizin içerir.

FileManager Aracılığıyla Documents Dizinine Erişim

Documents dizini, uygulama başlatmaları arasında kalıcı olması ve yedekten geri yüklenmesi gereken kullanıcı verileri içindir. iOS, bu dizini otomatik olarak iCloud ve iTunes yedeklerine dahil eder. urls(for:in:) yöntemi, istenen dizinin URL'lerinden oluşan bir dizi döndürür — dizideki ilk öğe birincil olandır.

swift
let fm = FileManager.default
let docs = fm.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first!

let fileURL = docs.appendingPathComponent("data.plist")
try data.write(to: fileURL)

FileManager, tam bir dosya işlemleri setini destekler: dosya oluşturma, kopyalama, taşıma, silme ve yeniden adlandırma. Her işlem hata fırlatabilir, bu nedenle tüm çağrılar do-catch yapısına sarılmalıdır. Dosya silmeye özellikle dikkat edin — işlem geri alınamaz ve removeItem(at:) sonrası veri kurtarma önceden yedek alınmadan imkansızdır.

Yedekleme Hariç Tutma Yönetimi

Sandbox kapsayıcısındaki tüm veriler iCloud yedeklemesine dahil edilmemelidir. Örneğin, önbelleğe alınmış indirilen resimler veya geçici işleme dosyalarının geri yüklenmesi gerekmez — bir sonraki kullanımda yeniden oluşturulurlar. Bir dizini veya dosyayı yedeklemeden hariç tutmak için isExcludedFromBackup özniteliğini true olarak ayarlayın. Apple, iCloud depolama kullanımını en aza indirmek ve kurtarma süresini kısaltmak için uzaktan geri yüklenebilen verilerin her zaman yedeklemeden hariç tutulmasını önerir.

swift
var cacheURL = fm.urls(
    for: .cachesDirectory,
    in: .userDomainMask
).first!
cacheURL.hasExcludedFromBackupKey = true

var values = URLResourceValues()
values.isExcludedFromBackup = true
try cacheURL.setResourceValues(values)

Dahili Depolama, Önbellek ve Harici Depolama Arasındaki Farklar

Mobil cihazdaki her depolama türünün kendi amacı ve kullanım kuralları vardır. Bu farklılıkları anlamak, geliştiricinin her veri türü için doğru yeri seçmesine yardımcı olur. Aşağıda, bir uygulama için mevcut olan üç ana depolama türünün bir karşılaştırması bulunmaktadır.

ÖzellikInternal StorageÖnbellek DiziniExternal Storage
Diğer uygulamalara görünürlükGizliGizliErişilebilir
Uygulama kaldırıldığında silmeTamTamKonuma bağlı
YedeklemeAndroid — hayır, iOS — evet (Documents)HayırSadece senkronizasyonda
Ortam olmadan kullanılabilirlikHer zamanHer zamanSD kart gerekli
Veri kaybı riskiMinimumYüksekOrta
Önerilen dosya boyutu100 MB'a kadar50 MB'a kadarHerhangi

Dahili depolama, diğer programlar tarafından erişilememesi gereken uygulama yapılandırmalarını, veritabanı dosyalarını ve kullanıcı belgelerini depolamak için idealdir. Önbellek dizini, bir sonraki kullanımda yeniden oluşturulabilen geçici dosyalar içindir: indirilen resimler, API yanıtları, ara işleme verileri. Harici depolama, büyük medya dosyaları (fotoğraf, video, müzik) ve kullanıcının diğer uygulamalarla paylaşılan erişim yoluyla paylaşmak istediği veriler için en uygundur.

Depolama türü seçimi, Google Play ve App Store'daki uygulama puanını da etkiler. Temizlik yapmadan dahili depolamada büyük miktarda veri depolayan uygulamalar olumsuz yorumlar alır: kullanıcılar yer olmamasından şikayet eder. App Annie araştırmasına göre, kullanıcıların %62'si, temizleme seçeneği olmadan cihazın dahili depolamasının 500 MB'ından fazlasını kaplayan bir uygulamayı siler.

Dahili Depolama Kullanımı için Öneriler

Uygulama dahili depolamasının doğru yönetimi, performansı, güvenliği ve kullanıcı deneyimini iyileştirir. Aşağıdaki öneriler, resmi Android ve iOS dokümantasyonunun yanı sıra milyonlarca kuruluma sahip uygulamalar geliştirme konusundaki pratik deneyime dayanmaktadır.

  • Depolanan veri hacmini en aza indirin. Dahili depolamayı yalnızca kritik önemdeki dosyalar için kullanın; geri kalanını önbelleğe veya harici depolamaya yerleştirin
  • Geçici dosyaları düzenli olarak temizleyin. Her başlatmada önbellek dizinini kontrol edin ve 24 saatten eski dosyaları silin — bu, sistem yükünü azaltır ve /data bölümünün taşmasını önler
  • Gizli verileri şifreleyin AndroidX Security kütüphanesinin EncryptedSharedPreferences veya EncryptedFile'ını kullanarak. Belirteçleri ve şifreleri düz metin olarak depolamak, root erişimine sahip truva atları tarafından kullanılan yaygın bir güvenlik açığıdır
  • Dosya yapısını güncellerken geçiş kullanın. Uygulamanın yeni bir sürümünü yayınlarken, eski dosyaların varlığını kontrol edin ve eskilerini silmeden önce bunları yeni dizinlere taşıyın

Uç durum testlerine özellikle dikkat edilmelidir. Dahili depolama dolduğunda, yazma işlemi beklenmedik şekilde kesintiye uğradığında (uygulama çökmesi, gelen çağrı) ve iOS yedekten geri yüklenirken uygulama davranışını kontrol edin. Bu senaryoların her birinde, veriler tutarlı kalmalı veya son kararlı duruma geri yüklenmelidir. İşlem dosyaları kullanın: verileri geçici bir dosyaya yazın, ardından atomik olarak hedefe yeniden adlandırın. Bu, yazma hatası durumunda bozuk verilerin okunmasını önler.

Kullanıcı kontrolünü unutmayın. Uygulama ayarlarında geçici verileri temizleme ve kullanılan dahili depolama hacmini görüntüleme seçeneği sağlayın. Google Play Console'a göre, bu özelliğe sahip uygulamalar “Performans” kategorisinde %18 daha fazla olumlu yorum alır.

Sıkça Sorulan Sorular

Uygulama kaldırıldıktan sonra Internal Storage'a ne olur?

Uygulamanın dahili depolamasındaki tüm veriler tamamen silinir. İşletim sistemi, veritabanları, ayarlar ve geçici dosyalar dahil hiçbir kalıntı dosya kalmamasını garanti eder. Harici depolamadaki veriler kalabilir.

Başka bir uygulama Internal Storage'taki dosyalarımı okuyabilir mi?

Cihaza root erişimi olmadan, diğer uygulamalar başka bir uygulamanın Internal Storage'ındaki dosyaları okuyamaz. Android'te bunun için süper kullanıcı ayrıcalıkları gerekirken, iOS'te Sandbox aracılığıyla çekirdek düzeyinde yalıtım sağlanır.

Dahili bellekte depolanabilecek maksimum veri miktarı nedir?

Açık bir sınır yoktur, ancak toplam hacim /data bölümündeki kullanılabilir alanla sınırlıdır. Uygulama başına 100 MB'ı aşmamanız önerilir — daha büyük hacimler harici depolamaya veya buluta yerleştirilmelidir.

Android'te filesDir ve cacheDir arasındaki fark nedir?

filesDir, kalıcı uygulama verileri içindir ve sistem tarafından yalnızca gerekli olduğunda silinir. cacheDir, belleğin azalması durumunda sistemin silebileceği geçici dosyalar içindir. Sistem, cacheDir'in kalıcılığını garanti etmez.

Internal Storage'tan SD karta veri nasıl aktarılır?

Internal Storage'tan SD karta doğrudan kopyalama, güvenlik politikası tarafından yasaktır. Kullanıcının onayıyla paylaşılan depolamada veri kopyaları oluşturmak için Android 10+ üzerinde MediaStore API veya SAF (Storage Access Framework) kullanın.

Özet

  • Internal Storage — her uygulamanın izole dizini, diğer programların ve kullanıcının erişimine karşı korumalı
  • Android ve iOS'ta Sandbox mimarisi farklı uygulamaların verilerinin çakışmamasını ve root erişimi olmadan okunamamasını sağlar
  • Depolama yöntemi seçimi veri türüne bağlıdır: filesDir ile dosyalar, DataStore ile ayarlar, Room ile yapılandırılmış veriler
  • iOS Sandbox, kritik olmayan veriler için isExcludedFromBackup özniteliğiyle kontrol edilmesi gereken bir yedekleme politikası içerir
  • Önbellekten farkı veri kalıcılığı garantisinde yatar: Internal Storage sistem tarafından silinmez, cacheDir ise bellek azaldığında temizlenebilir
  • Dahili depolamada önerilen veri hacmi — 100 MB'a kadar. Daha büyük dosyalar harici depolamaya veya bulut hizmetine yerleştirilmelidir
  • Kullanıcı kontrolü ile işgal edilen alanın görüntülenmesi ve veri temizleme yeteneği, mağazalarda güveni ve uygulama puanını artırır

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.

Projeyi tartış

Ayrıca okuyun