Tətbiqin daxili yaddaşı, cihazda yalnız müəyyən tətbiqin izolyasiya edilmiş anbar vasitəsilə əldə edə biləcəyi ayrılmış sahədir. Android Developers, 2026-ya görə, hər bir tətbiq öz sandbox qovluğunu alır və digər tətbiqlərin birbaşa çıxışı yoxdur. Bu yanaşma məlumatları icazəsiz oxunmadan qoruyur və mobil cihazların çoxvəzifəli mühitində sabit işi təmin edir.
Əsas məqamlar
Context.getFilesDir(), getCacheDir() və getDataDir() təqdim edirNSDocumentDirectory və NSCachesDirectory istifadə edirTətbiqin daxili yaddaşı — əməliyyat sisteminin hər tətbiqə quraşdırma zamanı ayırdığı izolyasiya edilmiş qovluqdur. Digər tətbiqlər və istifadəçi standart fayl menecerləri vasitəsilə bu qovluğa çıxış əldə edə bilməz. Sistem tətbiq silindikdə bu qovluqdakı məlumatların tamamilə silinəcəyini təmin edir. Bu yanaşma mobil əməliyyat sistemlərinin təhlükəsizlik modelinin əsasını təşkil edir və proqramlar arasında məxfi məlumat sızıntısının qarşısını alır.
Xarici yaddaşdan (SD kart) fərqli olaraq, daxili yaddaş həmişə əlçatandır və daşıyıcının mövcudluğunu yoxlamağı tələb etmir. Müasir cihazların NAND-flaş yaddaşında oxu və yazma sürəti ardıcıl oxu üçün 800–900 MB/s və ardıcıl yazma üçün 200–300 MB/s təşkil edir ki, bu da SATA SSD ilə müqayisə olunandır. Ayrılan sahənin ölçüsü cihazın ümumi yaddaşından və istehsalçının siyasətindən asılıdır: 64 GB flaş yaddaşa malik cihazlarda tətbiq ehtiyaca görə genişləndirmə imkanı ilə 16-64 MB ilkin sahə alır.
Daxili yaddaş arxitekturası Android və iOS-da fərqlidir. Android-də hər tətbiq /data/data/<package_name>/ qovluğunu alır və sistem burada files/, cache/ və databases/ altqovluqlarını yaradır. iOS-da tətbiq Documents/, Library/ və tmp/ qovluqları ilə Sandbox konteynerində işləyir və hər birinin öz təyinatı və ehtiyat nüsxə siyasəti var.
Tərtibatçıların daxili yaddaşda məlumat saxlamaq üçün bir neçə üsulu var. Hər bir metod öz tapşırığını həll edir və müəyyən məlumat növü üçün uyğundur. Düzgün metod seçimi tətbiqin performansına, işlənmə rahatlığına və istifadəçi məlumatlarının təhlükəsizliyinə birbaşa təsir edir.
Ən aşağı səviyyəli üsul — faylların birbaşa files qovluğuna yazılmasıdır. Tətbiq öz sandbox daxilində istənilən fayl və qovluq yarada bilər. Bu metod multimedia faylları, istifadəçi sənədləri və strukturlaşdırılmış təşkilat tələb etməyən istənilən ikili məlumat üçün uyğundur. Android-də qovluğa çıxış Context.getFilesDir() çağırışı ilə əldə edilir ki, bu da tətbiqin fayl qovluğuna mütləq yolu qaytarır. iOS-da analoji funksiyanı NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) yerinə yetirir.
Açar-dəyər cütlərini saxlamaq üçün Android SharedPreferences və Kotlin korutinləri və protobuf protokoluna əsaslanan daha müasir DataStore təklif edir. SharedPreferences məlumatları /data/data/<package>/shared_prefs/ qovluğundakı XML faylında saxlayır. Sadəliyinə baxmayaraq, SharedPreferences-in çatışmazlıqları var: sinxron yazma UI thread-ində gecikmələrə səbəb ola bilər və tip təhlükəsizliyinin olmaması səhv riskini artırır. DataStore bu problemləri Flow əsaslı asinxron API və protobuf sxemləri vasitəsilə tam tip dəstəyi təmin edərək həll edir.
Relational əlaqələri olan strukturlaşdırılmış məlumatlar üçün optimal seçim SQLite və ya Room örtüyücüsüdür. Verilənlər bazası databases/ qovluğunda tək faylda saxlanılır və tam SQL sintaksisini dəstəkləyir. Room tip təhlükəsiz API, avtomatik sxem miqrasiyası və korutin dəstəyi təmin edən rəsmi Jetpack kitabxanasıdır. Düzgün indeksləmə ilə verilənlər bazasının ölçüsü bir neçə gigabayta çata bilər və performans əhəmiyyətli dərəcədə aşağı düşmür. Mobil cihazlarda SQLite müasir flaqman prosessorda saniyədə 50.000 yazma əməliyyatını yerinə yetirir.
Doğrulama tokenləri və şifrələmə açarları kimi məxfi məlumatların saxlanması üçün Android EncryptedSharedPreferences təqdim edir. Standart SharedPreferences üzərindəki bu örtüyücü avtomatik olaraq açarları və dəyərləri AES256-GCM-None istifadə edərək şifrələyir. Şifrələmə diskə yazmazdan əvvəl fayl səviyyəsində həyata keçirilir, belə ki, cihaza fiziki çıxış olsa belə, təcavüzçü məzmunu oxuya bilməz. EncryptedSharedPreferences AndroidX Security kitabxanasının tərkibinə daxildir və tam faylların şifrələnməsi üçün EncryptedFile-i də əhatə edir.
Android SDK Context sinfi vasitəsilə daxili yaddaşla işləmək üçün metodlar dəsti təqdim edir. Hər bir metod tətbiqin sandbox daxilində müəyyən sistem qovluğuna yolu qaytarır. Kotlin nümunəsi ilə faylların yazılması və oxunmasının əsas əməliyyatlarına baxaq.
Daxili fayl qovluğuna yolu əldə etmək üçün əsas metod — context.filesDir. O, /data/data/<package>/files/ qovluğuna işarə edən File obyekti qaytarır. İlk müraciətdə sistem avtomatik olaraq bütün lazımi valideyn qovluqlarını yaradır. Daxili yaddaşdakı faylların ölçüsü açıq şəkildə məhdudlaşdırılmasa da, ümumi məlumat həcmi cihazın flaş yaddaşının 60–80%-ni təşkil edən /data bölməsinin boş yerindən çox olmamalıdır.
val context = getApplicationContext()
val file = File(context.filesDir, "notes.txt")
file.writeText("Qeydin məzmunu")
val content = file.readText()
println("Oxunub: $content")
writeText və readText metodları Kotlin standart kitabxanasının genişləndirmə funksiyalarıdır. Onlar axınların açılması və bağlanmasını avtomatik idarə edir və yaddaş sızıntısının qarşısını alır. İkili məlumatlarla işləmək üçün kodlaşdırma tələb etməyən və ByteArray massivləri ilə işləyən writeBytes və readBytes-dən istifadə edin. Böyük fayllarla işlərkən buferləşdirilmiş axınlardan istifadə etmək tövsiyə olunur: mətn üçün BufferedReader və BufferedWriter, ikili məlumat üçün BufferedInputStream və BufferedOutputStream.
Faylları iyerarxiyada təşkil etmək üçün filesDir daxilində altqovluqlar yaradın. Bu, məlumatları növlərə görə strukturlaşdırmağa kömək edir: şəkillər, sənədlər, ixrac faylları. mkdirs() metodu yolda çatışmayan bütün qovluqları, o cümledən iç-içə olanları yaradır. Əmin olun ki, yaratma əməliyyatı uğurla başa çatıb — metod yalnız yeni qovluqlar yaradıldıqda true qaytarır. Yaratma xətası ən çox /data bölməsindɓ yerin olmaması və ya fayl sisteminin inodlarının tökənməsi ilə əlaqədardır.
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
println("Qovluq yaradıldı")
}
val imageFile = File(imagesDir, "photo.jpg")
imageFile.writeBytes(byteArray)
Böyük faylların yazılmasından əvvəl boş yeri yoxlamaq üçün File.getFreeSpace() və ya File.getUsableSpace() istifadə edin. İkinci metod cari tətbiq üçün təhlükəsizlik kvotalarını nəzərə alaraq mövcud baytların sayını qaytarır — çoxistifadəçili cihazlar kontekstində daha dəqiqdir. Əgər boş yer gözlənilən fayl ölçüsündən azdırsa, istifadəçiyə mesaj göstərin və cihaz parametrlərində yer boşaltmağı təklif edin.
iOS-da hər tətbiq izolyasiya edilmiş Sandbox konteynerində işləyir. Sistem xüsusi icazələr olmadan onun hüdudlarından kənara çıxmaq üçün API təmin etmir. Fayl sistemi ilə işləmək üçün əsas alət Foundation framework-dən FileManager sinfidir. Sandbox konteynerinə bir neçə standart qovluq daxildir və hər birinin öz ehtiyat nüsxə siyasəti var.
Documents qovluğu tətbiqin işə salınmaları arasında saxlanılmalı və ehtiyat nüsxədən bərpa edilməli olan istifadəçi məlumatları üçün nəzərdə tutulub. iOS avtomatik olaraq bu qovluğu iCloud və iTunes ehtiyat nüsxəsinə daxil edir. urls(for:in:) metodu tələb olunan qovluğun URL ünvanlarının massivini qaytarır — massivin ilk elementi əsasdır.
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 fayl əməliyyatları dəstini dəstəkləyir: yaratma, köçürmə, daşıma, silmə və ad dəyişiktirmə. Hər əməliyyat xəta ata bilər, buna görə bütün çağırışlar do-catch konstruksiyasına bükülməlidir. Faylların silinməsinə xüsusi diqqət yetirin — əməliyyat geri döndürülə bilməz və removeItem(at:)-dən sonra məlumatları əvvəlcədən ehtiyat nüsxə olmadan bərpa etmək mümkün deyil.
Sandbox konteynerindəki bütün məlumatlar iCloud ehtiyat nüsxəsinə daxil olmamalıdır. Məsələn, yüklənmiş şəkillərin keşi və ya müvəqqəti emal faylları bərpa edilməlidir — onlar növbəti istifadədə yenidən yaradılacaq. Qovluğu və ya faylı ehtiyat nüsxədən çıxarmaq üçün isExcludedFromBackup atributunu true olaraq təyin edin. Apple uzaqdan bərpa edilə bilən məlumatları həmişə ehtiyat nüsxədən çıxarmağı tövsiyə edir ki, iCloud yaddaşını minimuma endirsin və bərpa müddətini qısaltdırsın.
var cacheURL = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
cacheURL.hasExcludedFromBackupKey = true
var values = URLResourceValues()
values.isExcludedFromBackup = true
try cacheURL.setResourceValues(values)
Mobil cihazda hər bir yaddaş növünün öz təyinatı və istifadə qaydaları var. Bu fərqləri başa düşmək tərtibatçıya hər məlumat növü üçün düzgün yeri seçməyə kömək edir. Aşağıda tətbiq üçün mövcud olan üç əsas yaddaş növünün müqayisəsi verilmişdir.
| Xarakteristika | Internal Storage | Cache Directory | External Storage |
|---|---|---|---|
| Digər tətbiqlər üçün görünmə | Gizli | Gizli | Əlçatan |
| Tətbiq silindikdə silinmə | Tam | Tam | Yerləşmədən asılıdır |
| Ehtiyat nüsxə | Android-də — yox, iOS-da — bəli (Documents) | Yox | Yalnız sinxronizasiya zamanı |
| Daşıyıcısız əlçatanlıq | Həmişə | Həmişə | SD kart tələb edir |
| Məlumat itkisi riski | Minimal | Yüksək | Orta |
| Tövsiyə olunan fayl ölçüsü | 100 MB-a qədər | 50 MB-a qədər | İstənilən |
Daxili yaddaş digər proqramlar üçün əlçatmaz olmalı tətbiq konfiqurasiyalarının, verilənlər bazası fayllarının və istifadəçi sənədlərinin saxlanması üçün optimaldır. Keş qovluğu növbəti istifadədə yenidən yaradıla bilən müvəqqəti fayllar üçün nəzərdə tutulub: yüklənmiş şəkillər, API cavabları, emalın aralıq məlumatları. Xarici yaddaş böyük multimedia faylları (şəkil, video, musiqi) və istifadəçinin digər tətbiqlərlə paylaşmaq istədiyi məlumatlar üçün ən uyğundur.
Yaddaş növünün seçimi həmçinin Google Play və App Store-da tətbiq reytinqinə təsir edir. Təmizləmədən daxili yaddaşda böyük həcmdə məlumat saxlayan tətbiqlər mənfi rəylər alır: istifadəçilər yer çatışmazlığından şikayətlənir. App Annie tədqiqatına görə, istifadəçilərin 62%-i tətbiq təmizləmə opsiyası olmadan cihazın daxili yaddaşının 500 MB-dan çoxunu tutarsa, onu silir.
Düzgün idarəetmə tətbiqin daxili yaddaşının performansını, təhlükəsizliyini və istifadəçi təcrübəsini artırır. Aşağıdakı tövsiyələr Android və iOS rəsmi sənədlərinə və milyonlarla quraşdırmaya malik tətbiqlərin işlənmə təcrübəsinə əsaslanır.
Kənar halların test edilməsinə xüsusi diqqət yetirin. Tətbiqin davranışını daxili yaddaşın dolması, yazmanın qəflətən kəsilməsi (tətbiqin çökməsi, zəng) və iOS ehtiyat nüsxəsindən bərpa zamanı yoxlayın. Bütün bu ssenarilərdə məlumatlar ardıcıl qalmalı və ya son sabit vəziyyətə qədər bərpa edilməlidir. Tranzaksiya fayllarından istifadə edin: məlumatları müvəqqəti fayla yazın, sonra atomik olaraq hədəfə adlandırın. Bu, yazma xətası zamanı zədələnmiş məlumatların oxunmasının qarşısını alır.
İstifadəçi nəzarətini unutmayın. Tətbiq parametrlərində müvəqqəti məlumatların təmizlənməsi və daxili yaddaşın tutduğu həcmin göstərilməsi opsiyasını təqdim edin. Google Play Console-a görə, belə funksiyaya malik tətbiqlər “Performans” kateqoriyasında 18% daha çox müsbət rəy alır.
Tez-tez verilən suallar
Tətbiqin daxili yaddaşındakı bütün məlumatlar tamamilə silinir. Əməliyyat sistemi verilənlər bazaları, parametrlər və müvəqqəti fayllar da daxil olmaqla qalıq faylların olmamasını təmin edir. Xarici yaddaşdakı məlumatlar isə qala bilər.
Cihaza root girişi olmadan digər tətbiqlər başqa tətbiqin Internal Storage fayllarını oxuya bilməz. Android-də bunun üçün superistifadəçi səlahiyyətləri tələb olunur, iOS-da isə izolyasiya Sandbox vasitəsilə növə səviyyəsində təmin edilir.
Açıq məhdudiyyət yoxdur, lakin ümumi həcm /data bölməsindəki boş yer lə məhduddur. Tətbiq başına 100 MB-dan çox olmamaq tövsiyə olunur — böyük həcmləri xarici yaddaşda və ya buludda yerləşdirmək daha yaxşıdır.
filesDir tətbiqin daimi məlumatları üçün nəzərdə tutulub və sistem tərəfindən ehtiyac olmadan silinmir. cacheDir — yaddaş çatışmazlığı zamanı sistemin silə biləcəyi müvəqqəti fayllar üçündür. Sistem cacheDir-in qorunmasına zəmanət vermir.
Internal Storage-dən SD karta birbaşa köçürmə təhlükəsizlik siyasəti ilə qadağandır. Android 10+-da MediaStore API və ya SAF (Storage Access Framework) istifadəçinin razılığı ilə ümumi girişdə məlumatların surətlərini yaratmaq üçün istifadə edin.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun