Ilovaning ichki xotirasi — bu faqat ma'lum bir ilova uchun izolyatsiyalangan saqlash orqali mavjud bo'lgan qurilmadagi ajratilgan joy. Android Developers, 2026 ma'lumotlariga ko'ra, har bir ilova o'zining sandbox-katalogini oladi, boshqa ilovalar esa unga to'g'ridan-to'g'ri kirish imkoniga ega emas. Bunday yondashuv ma'lumotlarni ruxsatsiz o'qishdan himoya qiladi va mobil qurilmalarning ko'p vazifali muhitida barqaror ishlashni ta'minlaydi.
Asosiy
Context.getFilesDir(), getCacheDir() va getDataDir() ni taqdim etadiNSDocumentDirectory va NSCachesDirectory dan foydalanadiIlovaning ichki xotirasi — bu operatsion tizim har bir ilovani o'rnatish vaqtida ajratadigan izolyatsiyalangan katalog. Boshqa ilovalar va foydalanuvchi standart fayl menejerlari orqali bu katalogga kira olmaydi. Tizim ushbu katalog ichidagi ma'lumotlar ilova o'chirilganda to'liq o'chirilishini kafolatlaydi. Bunday yondashuv mobil operatsion tizimlar xavfsizlik modelining asosini tashkil etadi va dasturlar o'rtasida maxfiy ma'lumotlarning sizib chiqishini oldini oladi.
Tashqi xotiradan (SD-karta) farqli o'laroq, ichki xotira doimo mavjud va tashuvchi mavjudligini tekshirishni talab qilmaydi. Zamonaviy qurilmalardagi NAND flesh-xotirada o'qish va yozish tezligi ketma-ket o'qishda 800–900 MB/s va ketma-ket yozishda 200–300 MB/s ga etadi, bu SATA SSD bilan solishtirish mumkin. Ajratilgan maydon hajmi qurilmaning umumiy sig'imi va ishlab chiqaruvchi siyosatiga bog'liq: 64 GB flesh-xotiraga ega qurilmalarda ilova 16 dan 64 MB gacha boshlang'ich maydonni oladi, kerak bo'lganda kengaytirish imkoniyati bilan.
Ichki xotira arxitekturasi Android va iOS da farq qiladi. Android da har bir ilova /data/data/<package_name>/ katalogini oladi, uning ichida tizim files/, cache/ va databases/ pastki kataloglarini yaratadi. iOS da ilova Sandbox konteynerida Documents/, Library/ va tmp/ kataloglari bilan ishlaydi, ularning har biri o'z vazifasi va zaxira nusxalash siyosatiga ega.
Dasturchilarga ilovaning ichki xotirasida ma'lumotlarni saqlashning bir necha usullari mavjud. Har bir usul o'z vazifasini hal qiladi va ma'lum bir ma'lumot turiga mos keladi. To'g'ri usulni tanlash to'g'ridan-to'g'ri ilova ishlashiga, ishlab chiqish qulayligiga va foydalanuvchi ma'lumotlari xavfsizligiga ta'sir qiladi.
Eng past darajadagi usul — files katalogiga to'g'ridan-to'g'ri fayl yozish. Ilova o'z qumxonasi ichida har qanday fayl va kataloglarni yaratishi mumkin. Bu usul media fayllar, foydalanuvchi hujjatlari va tuzilmaviy tashkilotni talab qilmaydigan har qanday ikkilik ma'lumotlarni saqlash uchun mos keladi. Android da katalogga kirish Context.getFilesDir() chaqiruvi orqali amalga oshiriladi, u ilova fayllari katalogining mutlaq yo'lini qaytaradi. iOS da shunga o'xshash funksiyani NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) bajaradi.
Kalit-qiymat juftliklarini saqlash uchun Android SharedPreferences va Kotlin korutinlari hamda protobuf protokoli asosidagi zamonaviyroq DataStore ni taklif qiladi. SharedPreferences ma'lumotlarni /data/data/<package>/shared_prefs/ katalogi ichidagi XML faylda saqlaydi. Foydalanish soddaligiga qaramasdan, SharedPreferences kamchiliklarga ega: sinxron yozish UI oqimida kechikishlarni keltirib chiqarishi mumkin va tur xavfsizligining yo'qligi xatolar xavfini oshiradi. DataStore bu muammolarni Flow asosidagi asinxron API va protobuf sxemalari orqali to'liq tur qo'llab-quvvatlanishi bilan hal qiladi.
Relyatsion bog'lanishlar bilan tuzilgan ma'lumotlar uchun optimal tanlov SQLite yoki Room qobig'idir. Ma'lumotlar bazasi databases/ katalogi ichidagi yagona faylda saqlanadi va to'liq SQL sintaksisini qo'llab-quvvatlaydi. Room — bu Jetpack ning rasmiy kutubxonasi bo'lib, tur xavfsiz API, sxemalarni avtomatik migratsiyasi va korutinlarni qo'llab-quvvatlashni ta'minlaydi. Ma'lumotlar bazasi hajmi to'g'ri indekslash bilan bir necha gigabaytga yetishi mumkin, sezilarli ishlash yo'qotishlarisiz. SQLite mobil qurilmalarda zamonaviy flagman protsessorlarda sekundiga 50 000 tagacha yozish operatsiyalarini bajaradi.
Maxfiy ma'lumotlarni, masalan autentifikatsiya tokenlari va shifrlash kalitlarini saqlash uchun Android EncryptedSharedPreferences ni taqdim etadi. Standart SharedPreferences ustidagi bu qobiq kalitlar va qiymatlarni AES256-GCM-None yordamida avtomatik shifrlaydi. Shifrlash diskka yozishdan oldin fayl darajasida amalga oshiriladi, shuning uchun qurilmaga jismoniy kirish imkoniyati bo'lsa ham, tajovuzkor tarkibni o'qiy olmaydi. EncryptedSharedPreferences AndroidX Security kutubxonasi tarkibiga kiradi, u butun fayllarni shifrlash uchun EncryptedFile ni ham o'z ichiga oladi.
Android SDK Context klassi orqali ichki xotira bilan ishlash uchun bir qator metodlarni taqdim etadi. Har bir metod ilova qumxonasi ichidagi ma'lum bir tizim katalogiga yo'lni qaytaradi. Kotlin misolida fayllarni yozish va o'qishning asosiy operatsiyalarini ko'rib chiqamiz.
Ichki fayl katalogi yo'lini olishning asosiy metodi — context.filesDir. U /data/data/<package>/files/ katalogiga ishora qiluvchi File obyektini qaytaradi. Birinchi murojaatda tizim barcha kerakli ota-kataloglarni avtomatik yaratadi. Ichki xotiradagi fayllar hajmi aniq cheklanmagan, ammo ma'lumotlarning umumiy miqdori /data bo'limining mavjud maydonidan oshmasligi kerak, bu odatda qurilma flesh-xotirasining 60–80% ini tashkil qiladi.
val context = getApplicationContext()
val file = File(context.filesDir, "notes.txt")
file.writeText("Yozuv mazmuni")
val content = file.readText()
println("O'qildi: $content")
writeText va readText metodlari standart Kotlin kutubxonasining extension funksiyalaridir. Ular avtomatik ravishda oqimlarni ochish va yopishni boshqaradi, bu xotira oqishini istisno qiladi. Ikkilik ma'lumotlar bilan ishlash uchun kodlashni talab qilmaydigan va ByteArray massivlari bilan ishlaydigan writeBytes va readBytes dan foydalaning. Katta fayllar bilan ishlashda buferlashtirilgan oqimlardan foydalanish tavsiya etiladi: matn uchun BufferedReader va BufferedWriter, ikkilik ma'lumotlar uchun BufferedInputStream va BufferedOutputStream.
Fayllarni ierarxiya bo'yicha tashkil qilish uchun filesDir ichida pastki kataloglar yarating. Bu ma'lumotlarni turlari bo'yicha tuzilmalashga yordam beradi: tasvirlar, hujjatlar, eksport fayllari. mkdirs() metodi yo'ldagi barcha yetishmayotgan kataloglarni, shu jumladan ichki kataloglarni ham yaratadi. Yaratish operatsiyasi muvaffaqiyatli o'tganiga ishonch hosil qiling — metod faqat yangi kataloglar yaratilganda true qaytaradi. Yaratish xatosi ko'pincha /data bo'limida joy etishmasligi yoki fayl tizimining inodlari tugashi bilan bog'liq.
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
println("Katalog yaratildi")
}
val imageFile = File(imagesDir, "photo.jpg")
imageFile.writeBytes(byteArray)
Katta fayllarni yozishdan oldin mavjud joyni tekshirish uchun File.getFreeSpace() yoki File.getUsableSpace() dan foydalaning. Ikkinchi metod joriy ilova uchun xavfsizlik kvotalarini hisobga olgan holda mavjud baytlar sonini qaytaradi — bu ko'p foydalanuvchili qurilmalar kontekstida aniqroqdir. Agar mavjud joy kutilgan fayl hajmidan kichik bo'lsa, foydalanuvchiga xabar ko'rsating va qurilma sozlamalarida joy bo'shatishni taklif qiling.
iOS da har bir ilova izolyatsiyalangan Sandbox konteynerida ishlaydi. Tizim maxsus ruxsatnomalarsiz uning chegarasidan chiqish uchun API taqdim etmaydi. Fayl tizimi bilan ishlashning asosiy vositasi Foundation frameworkidagi FileManager sinfidir. Sandbox konteyneri bir nechta standart kataloglarni o'z ichiga oladi, ularning har biri o'zining zaxira nusxalash siyosatiga ega.
Documents katalogi foydalanuvchi ma'lumotlari uchun mo'ljallangan bo'lib, ular ilova ishga tushirishlari o'rtasida saqlanishi va zaxira nusxadan tiklanishi kerak. iOS avtomatik ravishda ushbu katalogni iCloud va iTunes zaxira nusxasiga kiritadi. urls(for:in:) metodi so'ralgan katalogning URL manzillari massivini qaytaradi — massivning birinchi elementi asosiy hisoblanadi.
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 fayl operatsiyalarining to'liq to'plamini qo'llab-quvvatlaydi: yaratish, nusxalash, ko'chirish, o'chirish va qayta nomlash. Har bir operatsiya xatolik keltirib chiqarishi mumkin, shuning uchun barcha chaqiruvlar do-catch konstruksiyasiga o'ralgan bo'lishi kerak. Fayllarni o'chirishga alohida e'tibor bering — operatsiya qaytarib bo'lmaydigan va removeItem(at:) dan keyin ma'lumotlarni oldingi zaxira nusxasiz tiklash mumkin emas.
Sandbox konteyneridagi barcha ma'lumotlar iCloud zaxira nusxasiga tushishi shart emas. Masalan, yuklab olingan tasvirlar keshi yoki ishlov berishning vaqtinchalik fayllari tiklashni talab qilmaydi — ular keyingi foydalanishda qayta yaratiladi. Katalog yoki faylni zaxira nusxalashdan chiqarib tashlash uchun isExcludedFromBackup atributini true qiymatiga o'rnating. Apple uzoqdan tiklanishi mumkin bo'lgan ma'lumotlarni har doim zaxiradan chiqarib tashlashni tavsiya qiladi, bu iCloud saqlash hajmini minimallashtirish va tiklash vaqtini qisqartirish uchun.
var cacheURL = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
cacheURL.hasExcludedFromBackupKey = true
var values = URLResourceValues()
values.isExcludedFromBackup = true
try cacheURL.setResourceValues(values)
Mobil qurilmadagi har bir xotira turi o'zining vazifasi va foydalanish qoidalariga ega. Bu farqlarni tushunish dasturchiga har bir ma'lumot turi uchun to'g'ri joyni tanlashga yordam beradi. Quyida ilova uchun mavjud bo'lgan uchta asosiy xotira turining taqqoslanishi keltirilgan.
| Xarakteristika | Internal Storage | Cache Directory | External Storage |
|---|---|---|---|
| Boshqa ilovalar uchun ko'rinishi | Yashirin | Yashirin | Mavjud |
| Ilova o'chirilganda o'chirish | To'liq | To'liq | Joylashuvga bog'liq |
| Zaxira nusxalash | Android da — yo'q, iOS da — ha (Documents) | Yo'q | Faqat sinxronizatsiyada |
| Tashuvchisiz mavjudlik | Doim | Doim | SD-karta talab etiladi |
| Ma'lumot yo'qotish xavfi | Minimal | Yuqori | O'rtacha |
| Tavsiya etilgan fayl hajmi | 100 MB gacha | 50 MB gacha | Har qanday |
Ichki xotira ilova konfiguratsiyalari, ma'lumotlar bazasi fayllari va boshqa dasturlar uchun mavjud bo'lmasligi kerak bo'lgan foydalanuvchi hujjatlarini saqlash uchun maqbuldir. Kesh-katalog vaqtinchalik fayllar uchun mo'ljallangan bo'lib, ularni keyingi foydalanishda qayta yaratish mumkin: yuklab olingan tasvirlar, API javoblari, oraliq ishlov berish ma'lumotlari. Tashqi xotira katta media fayllar (fotosuratlar, videolar, musiqalar) va foydalanuvchi umumiy kirish orqali boshqa ilovalar bilan baham ko'rmoqchi bo'lgan ma'lumotlar uchun eng mos keladi.
Xotira turini tanlash ilova reytingiga Google Play va App Store da ta'sir qiladi. Ichki xotirada tozalamasdan katta hajmdagi ma'lumotlarni saqlaydigan ilovalar salbiy sharhlar oladi: foydalanuvchilar joy etishmasligidan shikoyat qiladilar. App Annie tadqiqotiga ko'ra, 62% foydalanuvchilar ilovani o'chiradi, agar u tozalash opsiyasisiz qurilmaning ichki xotirasidan 500 MB dan ortiq joy egallasa.
Ichki xotirani to'g'ri boshqarish ilova ishlashini, xavfsizligini va foydalanuvchi tajribasini oshiradi. Quyidagi tavsiyalar Android va iOS rasmiy hujjatlariga, shuningdek millionlab o'rnatishlarga ega ilovalarni ishlab chiqish amaliyotiga asoslangan.
Alohida e'tiborni chegara holatlarini test qilishga qaratish lozim. Ilovaning ichki xotira to'lganda, yozish to'satdan uzilganda (ilova qulashi, qo'ng'iroq) va iOS zaxira nusxasidan tiklanishdagi xatti-harakatini tekshiring. Ushbu stsenariylarning har birida ma'lumotlar izchil bo'lishi yoki oxirgi barqaror holatga tiklanishi kerak. Tranzaksiya fayllaridan foydalaning: ma'lumotlarni vaqtinchalik faylga yozing, so'ngra uni atomik tarzda maqsadli faylga qayta nomlang. Bu yozishdagi nosozlikda buzilgan ma'lumotlarni o'qishning oldini oladi.
Foydalanuvchi nazoratini unutmang. Ilova sozlamalarida vaqtinchalik ma'lumotlarni tozalash opsiyasini va ichki xotiraning band hajmini ko'rsatishni taqdim eting. Google Play Console ma'lumotlariga ko'ra, bunday funksiyaga ega ilovalar „Ishlash” toifasida 18% ko'proq ijobiy sharhlar oladi.
Tez-tez so'raladigan savollar
Ilovaning ichki xotirasidagi barcha ma'lumotlar to'liq o'chiriladi. Operatsion tizim ma'lumotlar bazalari, sozlamalar va vaqtinchalik fayllarni o'z ichiga olgan qoldiq fayllarning yo'qligini kafolatlaydi. Tashqi xotiradagi ma'lumotlar saqlanib qolishi mumkin.
Qurilmaga root kirishisiz boshqa ilovalar boshqa ilovaning Internal Storage fayllarini o'qiy olmaydi. Android da buning uchun superfoydalanuvchi imtiyozlari talab etiladi, iOS da esa izolyatsiya yadro darajasida Sandbox orqali ta'minlanadi.
Aniq chegara yo'q, ammo umumiy hajm /data bo'limidagi bo'sh joy bilan cheklangan. Har bir ilova uchun 100 MB dan oshmaslik tavsiya etiladi — katta hajmlarni tashqi xotirada yoki bulutda joylashtirish yaxshiroq.
filesDir ilovaning doimiy ma'lumotlari uchun mo'ljallangan va tizim zaruratsiz uni o'chirmaydi. cacheDir — vaqtinchalik fayllar uchun, tizim xotira yetishmasligida ularni o'chirishi mumkin. Tizim cacheDir saqlanishini kafolatlamaydi.
Internal Storage dan SD-kartaga to'g'ridan-to'g'ri nusxalash xavfsizlik siyosati bilan taqiqlangan. Android 10+ da MediaStore API yoki SAF (Storage Access Framework) dan foydalanib, foydalanuvchi roziligi bilan umumiy kirishda ma'lumotlarning nusxalarini yarating.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.