Veri ve dosya depolamaya genel bakış

Android, diğer platformlardaki disk tabanlı dosya sistemlerine benzer bir dosya sistemi kullanır. Sistem, uygulama verilerinizi kaydetmeniz için çeşitli seçenekler sunar:

  • Uygulamaya özel depolama: Yalnızca uygulamanızın kullanımı için tasarlanmış dosyaları, dahili depolama birimindeki özel dizinlerde veya harici depolama alanındaki farklı özel dizinlerde depolayın. Diğer uygulamaların erişememesi gereken hassas bilgileri kaydetmek için dahili depolama alanındaki dizinleri kullanın.
  • Paylaşılan depolama alanı: Medya, dokümanlar ve diğer dosyalar dahil olmak üzere uygulamanızın başka uygulamalarla paylaşmayı amaçladığı dosyaları depolayın.
  • Tercihler: Gizli, temel verileri anahtar/değer çiftlerinde depolayın.
  • Veritabanları: Yapılandırılmış verileri, Oda kalıcılık kitaplığını kullanarak özel bir veritabanında depolayın.

Bu seçeneklerin özellikleri aşağıdaki tabloda özetlenmiştir:

İçerik türü Erişim yöntemi İzin gerekli Diğer uygulamalar erişebilir mi? Uygulama kaldırıldığında dosyalar kaldırıldı mı?
Uygulamaya özel dosyalar Yalnızca uygulamanızın kullanımı için dosyalar Dahili depolama alanından, getFilesDir() veya getCacheDir()

Harici depolama alanından, getExternalFilesDir() veya getExternalCacheDir()
Dahili depolama için hiçbir zaman gerekmez

Uygulamanız Android 4.4 (API düzeyi 19) veya sonraki sürümleri çalıştıran cihazlarda kullanıldığında harici depolama için gerekli değildir
Hayır Evet
Medya Paylaşılabilir medya dosyaları (resimler, ses dosyaları, videolar) MediaStore API'si READ_EXTERNAL_STORAGE Android 11 (API düzeyi 30) veya sonraki sürümlerde diğer uygulamaların dosyalarına erişirken

READ_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE Android 10'da (API düzeyi 29) diğer uygulamaların dosyalarına erişirken

Android 9 (API düzeyi 28) veya önceki sürümlerde tüm dosyalar için izin gereklidir
Evet, ancak diğer uygulama için READ_EXTERNAL_STORAGE izni gerekiyor Hayır
Belgeler ve diğer dosyalar İndirilen dosyalar da dahil olmak üzere diğer paylaşılabilir içerik türleri Depolama Erişim Çerçevesi Yok Evet, sistem dosya seçiciden Hayır
Uygulama tercihleri Anahtar/değer çiftleri Jetpack Tercihleri kitaplığı Yok Hayır Evet
Veritabanı Yapılandırılmış veri Oda kalıcılık kitaplığı Yok Hayır Evet

Seçeceğiniz çözüm, özel ihtiyaçlarınıza bağlıdır:

Verileriniz ne kadar alan gerektiriyor?
Dahili depolamada, uygulamaya özel veriler için sınırlı alan bulunur. Önemli miktarda veri tasarrufu yapmanız gerekiyorsa diğer depolama türlerini kullanın.
Veri erişiminin ne kadar güvenilir olması gerekiyor?
Uygulamanızın temel işlevleri için belirli veriler gerekiyorsa (ör. uygulamanız başlatılırken), verileri dahili depolama dizinine veya bir veritabanına yerleştirin. Harici depolamada depolanan uygulamaya özel dosyalara her zaman erişilemez. Bunun nedeni, bazı cihazlar kullanıcıların harici depolama alanına karşılık gelen fiziksel bir cihazı kaldırmasına izin vermesidir.
Ne tür verileri saklamanız gerekiyor?
Yalnızca uygulamanız için anlamlı olan verileriniz varsa uygulamaya özel depolama alanını kullanın. Paylaşılabilir medya içerikleri söz konusu olduğunda diğer uygulamaların içeriğe erişebilmesi için paylaşılan depolama alanını kullanın. Yapılandırılmış veriler için tercihleri (anahtar/değer verileri için) veya veritabanını (2'den fazla sütun içeren veriler için) kullanın.
Veriler uygulamanıza özel olmalı mı?
Başka uygulamalardan erişilmemesi gereken hassas verileri depolarken dahili depolama, tercihler veya veritabanı kullanın. Dahili depolamaya ek bir avantaj da verilerin kullanıcılardan gizlenmesidir.

Depolama konumu kategorileri

Android iki tür fiziksel depolama konumu sağlar: dahili depolama ve harici depolama. Çoğu cihazda dahili depolama, harici depolama alanından daha küçüktür. Ancak dahili depolama alanı tüm cihazlarda her zaman kullanılabilir olduğundan uygulamanızın kullandığı verileri koymak için daha güvenilir bir yer haline gelir.

SD kart gibi çıkarılabilir birimler, dosya sisteminde harici depolama alanının bir parçası olarak görünür. Android, bu cihazları /sdcard gibi bir yol kullanarak temsil eder.

Uygulamaların kendisi varsayılan olarak dahili depolama alanında depolanır. Bununla birlikte, APK boyutunuz çok büyükse uygulamanızın manifest dosyasında uygulamanızı harici depolama alanına yüklemeyi tercih edebilirsiniz:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

İzinler ve harici depolama alanına erişim

Android, depolama alanıyla ilgili şu izinleri tanımlar: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE ve MANAGE_EXTERNAL_STORAGE.

Android'in önceki sürümlerinde uygulamaların, harici depolama alanındaki uygulamaya özel dizinler dışındaki tüm dosyalara erişmek için READ_EXTERNAL_STORAGE iznini beyan etmesi gerekiyordu. Ayrıca, uygulamaların, uygulamaya özel dizin dışındaki herhangi bir dosyaya yazması için WRITE_EXTERNAL_STORAGE iznini beyan etmesi gerekiyordu.

Android'in daha son sürümleri, bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma yeteneğini belirleme konusunda konum yerine dosyanın amacına dayalıdır. Özellikle uygulamanız Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsa WRITE_EXTERNAL_STORAGE izninin, uygulamanızın depolama alanına erişimi üzerinde herhangi bir etkisi yoktur. Uygulamalara, cihazın dosya sisteminin yalnızca gerçekten kullandıkları alanlara erişim izni verildiğinden, amaca dayalı bu depolama modeli, kullanıcı gizliliğini iyileştirir.

Android 11, uygulamaya özel dizin ve MediaStore dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE iznini sunar. Bu izin ve çoğu uygulamanın kullanım alanlarını yerine getirmek için neden bunu beyan etmesi gerekmediği hakkında daha fazla bilgi edinmek için depolama cihazındaki tüm dosyaları yönetme ile ilgili kılavuza bakın.

Kapsamlı depolama

Kullanıcılara dosyaları üzerinde daha fazla kontrol sunmak ve dosya karmaşıklığını azaltmak için Android 10 (API düzeyi 29) ve sonraki sürümleri hedefleyen uygulamalara varsayılan olarak harici depolama veya kapsamlı depolama alanı için kapsamlı erişim verilir. Bu tür uygulamalar, yalnızca harici depolama alanındaki uygulamaya özel dizine ve uygulamanın oluşturduğu belirli medya türlerine erişebilir.

Uygulamanızın, uygulamaya özel bir dizinin dışında ve MediaStore API'lerinin erişebileceği bir dizinin dışında depolanan bir dosyaya erişmesi gerekmiyorsa kapsamlı depolama alanını kullanın. Uygulamaya özel dosyaları harici depolamada depoluyorsanız bu dosyaları harici depolama alanındaki uygulamaya özel bir dizine yerleştirerek kapsamlı depolama alanı kullanımını kolaylaştırabilirsiniz. Böylece, kapsamlı depolama etkinleştirildiğinde uygulamanız bu dosyalara erişimi sürdürür.

Uygulamanızı kapsamlı depolama alanına hazırlamak için depolama alanı kullanım alanları ve en iyi uygulamalar rehberini inceleyin. Uygulamanızın kapsama dahil olmayan başka bir kullanım alanı varsa özellik isteği gönderin. Kapsamlı depolama alanı kullanımını geçici olarak devre dışı bırakabilirsiniz.

Dosyaları bir cihazda görüntüleme

Bir cihazda depolanan dosyaları görüntülemek için Android Studio'nun Cihaz Dosya Gezgini'ni kullanın.

Ek kaynaklar

Veri depolama hakkında daha fazla bilgi için aşağıdaki kaynaklara başvurun.

Videolar