Ilovaning ichki xotirasi: bu nima, ma'lumotlarni saqlash usullari va ishlab chiqishda qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-03-13 O'qish vaqti: 11 daq

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

  • Internal Storage — har bir ilovaning izolyatsiyalangan saqlash joyi, boshqa dasturlar uchun mavjud emas
  • Sandbox modeli bir ilovaning ma'lumotlari maxsus ruxsatlarsiz boshqasi tomonidan o'qilmasligini kafolatlaydi
  • Android ichki xotiraga kirish uchun Context.getFilesDir(), getCacheDir() va getDataDir() ni taqdim etadi
  • iOS ilova Sandbox konteynerida NSDocumentDirectory va NSCachesDirectory dan foydalanadi
  • Avtomatik tozalash ilovani o'chirishda barcha ma'lumotlarni ichki xotiradan to'liq olib tashlashni kafolatlaydi

Ilovaning ichki xotirasi nima?

Ilovaning 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.

Ichki xotirada ma'lumotlarni saqlash usullari

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.

Izolyatsiyalangan fayl saqlash

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.

SharedPreferences va DataStore

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.

SQLite ma'lumotlar bazasi va Room

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.

EncryptedSharedPreferences

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-da ichki xotira bilan ishlash

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.

Context orqali filesDir ga kirish

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.

kotlin
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.

Ichki xotirada pastki kataloglarni yaratish

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.

kotlin
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 ichki xotira bilan ishlash

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.

FileManager orqali Documents katalogiga kirish

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.

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 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.

Zaxira nusxalash istisnolarini boshqarish

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.

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

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

Ichki xotira, kesh va tashqi xotira o'rtasidagi farqlar

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.

XarakteristikaInternal StorageCache DirectoryExternal Storage
Boshqa ilovalar uchun ko'rinishiYashirinYashirinMavjud
Ilova o'chirilganda o'chirishTo'liqTo'liqJoylashuvga bog'liq
Zaxira nusxalashAndroid da — yo'q, iOS da — ha (Documents)Yo'qFaqat sinxronizatsiyada
Tashuvchisiz mavjudlikDoimDoimSD-karta talab etiladi
Ma'lumot yo'qotish xavfiMinimalYuqoriO'rtacha
Tavsiya etilgan fayl hajmi100 MB gacha50 MB gachaHar 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 xotiradan foydalanish bo'yicha tavsiyalar

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.

  • Saqlangan ma'lumotlar hajmini minimallashtiring. Ichki xotiradan faqat muhim fayllar uchun foydalaning, qolganini keshda yoki tashqi xotirada joylashtiring
  • Vaqtinchalik fayllarni muntazam tozalang. Har bir ishga tushirishda cache katalogini tekshiring va 24 soatdan eski fayllarni o'chiring — bu tizim yukini kamaytiradi va /data bo'limining to'lib ketishini oldini oladi
  • Maxfiy ma'lumotlarni shifrlang AndroidX Security kutubxonasidagi EncryptedSharedPreferences yoki EncryptedFile yordamida. Tokenlar va parollarni ochiq matn shaklida saqlash — bu root kirishiga ega troyanlar tomonidan ekspluatatsiya qilinadigan keng tarqalgan zaiflikdir
  • Migratsiyadan foydalaning fayl tuzilmasini yangilashda. Ilovaning yangi versiyasini chiqarishda eski fayllar mavjudligini tekshiring va ularni yangi kataloglarga ko'chiring, keyin eskilarni o'chiring

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

Ilova o'chirilgandan so'ng Internal Storage bilan nima sodir bo'ladi?

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.

Boshqa ilova mening fayllarimni Internal Storage dan o'qiy oladimi?

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.

Ichki xotirada qancha maksimal ma'lumot saqlash mumkin?

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.

Android da filesDir va cacheDir o'rtasidagi farq nima?

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 ma'lumotlarni qanday ko'chirish mumkin?

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

  • Internal Storage — har bir ilovaning izolyatsiyalangan katalogi, boshqa dasturlar va foydalanuvchi kirishidan himoyalangan
  • Sandbox arxitekturasi Android va iOS da turli ilovalar ma'lumotlari kesishmasligini va root kirishisiz o'qilmasligini kafolatlaydi
  • Saqlash usulini tanlash ma'lumot turiga bog'liq: fayllar — filesDir orqali, sozlamalar — DataStore orqali, tuzilgan ma'lumotlar — Room orqali
  • iOS Sandboxi zaxira nusxalash siyosatini o'z ichiga oladi, uni muhim bo'lmagan ma'lumotlar uchun isExcludedFromBackup atributi orqali boshqarish kerak
  • Keshdan farqi saqlanish kafolatida: Internal Storage tizim tomonidan o'chirilmaydi, cacheDir dan farqli o'laroq, u xotira yetishmasligida tozalanishi mumkin
  • Tavsiya etilgan hajm ichki xotiradagi ma'lumotlar — 100 MB gacha. Katta fayllarni tashqi xotirada yoki bulut xizmatida joylashtirish kerak
  • Foydalanuvchi nazorati band qilingan joy va ma'lumotlarni tozalash imkoniyati do'konlarda ishonch va ilova reytingini oshiradi

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.

Loyihani muhokama qilish

Shuningdek o'qing