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 oluşturulmuş dosyaları, dahili depolama birimindeki özel dizinlerde veya harici depolama alanındaki farklı özel dizinlerde depolayın. Diğer uygulamaların erişmemesi gereken hassas bilgileri kaydetmek için dahili depolama alanındaki dizinleri kullanın.
  • Paylaşılan depolama: Medya, dokümanlar ve diğer dosyalar da dahil olmak üzere uygulamanızın diğer uygulamalarla paylaşmayı amaçladığı dosyaları depolayın.
  • Tercihler: Özel, temel verileri anahtar/değer çiftlerinde depolayın.
  • Veritabanları: Oda kalıcılığı kitaplığını kullanarak yapılandırılmış verileri ö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ılsın mı?
Uygulamaya özel dosyalar Yalnızca uygulamanızın kullanımına yönelik dosyalar Dahili depolamadan, getFilesDir() veya getCacheDir()

Harici depolamadan, 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'sı READ_EXTERNAL_STORAGE Android 11 (API düzeyi 30) veya sonraki sürümlerde diğer uygulamaların dosyalarına erişirken

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

Android 9 (API düzeyi 28) veya önceki sürümlerde tüm dosyalar için izin gereklidir
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE iznine ihtiyacı var Hayır
Belgeler ve diğer dosyalar İndirilen dosyalar dahil olmak üzere paylaşılabilir diğer içerik türleri Depolama Erişim Çerçevesi Yok Evet, sistem dosya seçicisini kullanarak 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çtiğiniz çözüm belirli ihtiyaçlarınıza bağlıdır:

Verileriniz ne kadar alan gerektiriyor?
Dahili depolama alanında uygulamaya özel veriler için sınırlı alan bulunur. Önemli miktarda veriden tasarruf etmeniz gerekiyorsa diğer depolama türlerini kullanın.
Veri erişiminin ne kadar güvenilir olması gerekiyor?
Uygulamanızın temel işlevi için belirli veriler (ör. başlatılırken) gerekiyorsa verileri dahili depolama dizinine veya bir veritabanına yerleştirin. Bazı cihazlar, kullanıcıların harici depolamaya karşılık gelen fiziksel bir cihazı kaldırmasına izin verdiğinden, harici depolamada depolanan uygulamaya özel dosyalara her zaman erişilemez.
Ne tür verileri depolamanı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ış verilerde tercihler (anahtar/değer verileri için) veya bir veritabanı (2'den fazla sütun içeren veriler için) kullanın.
Veriler uygulamanıza özel mi olmalı?
Hassas verileri (başka hiçbir uygulamadan erişilmemesi gereken verileri) depolarken dahili depolama alanı, tercihler veya veritabanını kullanın. Dahili depolama, verilerin kullanıcılardan gizlenmesi gibi ek bir avantaj da sunar.

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. Bununla birlikte, dahili depolama her zaman tüm cihazlarda kullanılabilir. Bu nedenle, uygulamanızın bağlı olduğu verileri koymak için daha güvenilir bir yer sunar.

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

Uygulamalar varsayılan olarak dahili depolamada depolanır. Bununla birlikte, APK'nızın boyutu çok büyükse, uygulamanızın manifest dosyasında, bunun yerine uygulamanızı harici bir depolama alanına yükleme tercihini belirtebilirsiniz:

<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 depolamadaki uygulamaya özel dizinler dışındaki herhangi bir dosyaya 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 de gerekiyordu.

Android'in son sürümleri, bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma özelliğini belirleme konusunda, dosyanın konumundan daha çok dosyanın amacına dayanı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 olmaz. Bu amaca dayalı depolama modeli, uygulamalara yalnızca cihazın dosya sisteminde bulunan gerçekten kullandıkları alanlara erişim izni verildiğinden kullanıcı gizliliğini artırır.

Android 11'de, uygulamaya özel dizin ve MediaStore dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE izni kullanıma sunuldu. Bu izin ve çoğu uygulamanın, kullanım alanlarını karşılamak için neden bu izni beyan etmesi gerekmediği hakkında daha fazla bilgi edinmek için bir depolama cihazındaki tüm dosyaları yönetme ile ilgili kılavuzu inceleyin.

Kapsamlı depolama alanı

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

Uygulamanızın, uygulamaya özel bir dizinin ve MediaStore API'lerinin erişebildiği bir dizinin dışında depolanan bir dosyaya erişmesi gerekmiyorsa kapsamlı depolamayı kullanın. Uygulamaya özel dosyaları harici depolamada depoluyorsanız bu dosyaları harici depolama alanında uygulamaya özel bir dizine yerleştirerek kapsamlı depolamayı benimsemeyi kolaylaştırabilirsiniz. Bu şekilde, kapsamlı depolama etkinleştirildiğinde uygulamanız bu dosyalara erişmeye devam eder.

Uygulamanızı kapsamlı depolamaya hazırlamak için depolama alanı kullanım alanları ve en iyi uygulamalar kılavuzunu görüntüleyin. Uygulamanızın, kapsamlı depolama kapsamında olmayan başka bir kullanım alanı varsa özellik isteğinde bulunun. Kapsamlı depolama alanı kullanımını geçici olarak devre dışı bırakabilirsiniz.

Bir cihazdaki dosyaları 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 bakın.

Videolar