Interna memorija aplikacije: šta je to, načini skladištenja podataka i kako funkcioniše u razvoju

Аутор: IT Sectr Објављено: 2026-03-13 Време читања: 11 мин

Interna memorija aplikacije je izdvojeni prostor na uređaju dostupan samo konkretnoj aplikaciji kroz izolovano skladištenje. Prema Android Developers, 2026, svaka aplikacija dobija sopstveni sandbox direktorijum kojem druge aplikacije nemaju direktan pristup. Takav pristup štiti podatke od neovlašćenog čitanja i obezbeđuje stabilan rad u višezadatkovom okruženju mobilnih uređaja.

Glavno

  • Internal Storage je izolovano skladište svake aplikacije, nedostupno drugim programima
  • Sandbox model garantuje da podaci jedne aplikacije ne mogu biti pročitani od druge bez posebnih dozvola
  • Android pruža Context.getFilesDir(), getCacheDir() i getDataDir() za pristup internoj memoriji
  • iOS koristi NSDocumentDirectory i NSCachesDirectory u Sandbox kontejneru aplikacije
  • Automatsko čišćenje pri brisanju aplikacije garantuje potpuno uklanjanje svih podataka iz interne memorije

Šta je interna memorija aplikacije?

Interna memorija aplikacije je izolovani direktorijum koji operativni sistem dodeljuje svakoj aplikaciji prilikom instalacije. Ovom direktorijumu nemaju pristup druge aplikacije ni korisnik putem standardnih menadžera fajlova. Sistem garantuje da će podaci unutar ovog direktorijuma biti potpuno obrisani prilikom deinstalacije aplikacije. Ovakav pristup čini osnovu sigurnosnog modela mobilnih operativnih sistema, sprečavajući curenje poverljivih informacija između programa.

Za razliku od eksternog skladišta (SD kartice), interna memorija je uvek dostupna i ne zahteva proveru prisustva medija. Brzina čitanja i pisanja u NAND fleš memoriju savremenih uređaja dostiže 800–900 MB/s sekvencijalnog čitanja i 200–300 MB/s sekvencijalnog pisanja, što je uporedivo sa SATA SSD. Veličina dodeljene oblasti zavisi od ukupnog kapaciteta uređaja i politike proizvođača: na uređajima sa 64 GB fleš memorije, aplikacija dobija od 16 do 64 MB početnog prostora sa mogućnošću proširenja po potrebi.

Arhitektura internog skladištenja se razlikuje na Androidu i iOS-u. Na Androidu svaka aplikacija dobija direktorijum /data/data/<package_name>/, unutar kojeg sistem kreira poddirektorijume files/, cache/ i databases/. Na iOS-u aplikacija radi u Sandbox kontejneru sa direktorijumima Documents/, Library/ i tmp/, od kojih svaki ima svoju namenu i politiku rezervnog kopiranja.

Načini skladištenja podataka u internoj memoriji

Razvojnim inženjerima je na raspolaganju nekoliko načina čuvanja podataka u internoj memoriji aplikacije. Svaki metod rešava svoj zadatak i odgovara određenom tipu podataka. Pravilan izbor metoda direktno utiče na performanse aplikacije, udobnost razvoja i sigurnost korisničkih podataka.

Izolovano skladištenje fajlova

Najniži nivo metoda je direktno pisanje fajlova u files direktorijum. Aplikacija može kreirati bilo koje fajlove i direktorijume unutar svog peskovnika. Ovaj metod je pogodan za čuvanje medijskih fajlova, korisničkih dokumenata i bilo kakvih binarnih podataka koji ne zahtevaju strukturisanu organizaciju. Na Androidu se pristup direktorijumu ostvaruje pozivom Context.getFilesDir(), koji vraća apsolutnu putanju do direktorijuma fajlova aplikacije. Na iOS-u sličnu funkciju obavlja NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).

SharedPreferences i DataStore

Za čuvanje parova ključ-vrednost Android nudi SharedPreferences i moderniji DataStore zasnovan na Kotlin korutinama i protobuf protokolu. SharedPreferences čuva podatke u XML fajlu unutar direktorijuma /data/data/<package>/shared_prefs/. Uprkos jednostavnosti korišćenja, SharedPreferences ima nedostatke: sinhrono pisanje može izazvati kašnjenja na UI niti, a odsustvo tipne sigurnosti povećava rizik od grešaka. DataStore rešava ove probleme pružajući asinhroni API zasnovan na Flow-u i potpunu podršku za tipove kroz protobuf šeme.

SQLite baza podataka i Room

Za strukturisane podatke sa relacionim vezama optimalan izbor je SQLite ili omotač Room. Baza podataka se čuva u jedinstvenom fajlu unutar direktorijuma databases/ i podržava potpunu SQL sintaksu. Room je zvanična Jetpack biblioteka koja pruža tipno siguran API, automatsku migraciju šema i podršku za korutine. Veličina baze podataka može dostizati nekoliko gigabajta bez značajnog gubitka performansi uz pravilno indeksiranje. SQLite na mobilnim uređajima obrađuje do 50.000 operacija pisanja u sekundi na savremenim flagship procesorima.

EncryptedSharedPreferences

Za čuvanje poverljivih podataka, poput autentifikacionih tokena i ključeva za šifrovanje, Android nudi EncryptedSharedPreferences. Ovaj omotač nad standardnim SharedPreferences automatski šifruje ključeve i vrednosti koristeći AES256-GCM-None. Šifrovanje se obavlja na nivou fajla pre pisanja na disk, tako da čak i uz fizički pristup uređaju napadač ne može pročitati sadržaj. EncryptedSharedPreferences je deo AndroidX Security biblioteke, koja takođe uključuje EncryptedFile za šifrovanje celih fajlova.

Kako raditi sa internom memorijom na Androidu

Android SDK pruža skup metoda za rad sa internom memorijom kroz klasu Context. Svaki metod vraća putanju do određenog sistemskog direktorijuma unutar sandbox-a aplikacije. Razmotrimo osnovne operacije pisanja i čitanja fajlova na primeru Kotlina.

Pristup filesDir-u kroz Context

Glavni metod za dobijanje putanje do internog direktorijuma fajlova je context.filesDir. On vraća File objekat koji pokazuje na direktorijum /data/data/<package>/files/. Prilikom prvog poziva sistem automatski kreira sve potrebne roditeljske direktorijume. Veličina fajlova u internoj memoriji nije eksplicitno ograničena, ali ukupna količina podataka ne sme premašiti raspoloživi prostor na particiji /data, koja obično čini 60–80% od ukupnog kapaciteta fleš memorije uređaja.

kotlin
val context = getApplicationContext()
val file = File(context.filesDir, "notes.txt")

file.writeText("Sadržaj beleške")

val content = file.readText()
println("Pročitano: $content")

Metodi writeText i readText su extension funkcije standardne Kotlin biblioteke. Oni automatski upravljaju otvaranjem i zatvaranjem tokova, što isključuje curenje memorije. Za rad sa binarnim podacima koristite writeBytes i readBytes, koji ne zahtevaju kodiranje i rade sa ByteArray nizovima. Pri radu sa velikim fajlovima preporučuje se korišćenje baferovanih tokova: BufferedReader i BufferedWriter za tekst, BufferedInputStream i BufferedOutputStream za binarne podatke.

Kreiranje poddirektorijuma u internoj memoriji

Za organizaciju fajlova u hijerarhiju kreirajte poddirektorijume unutar filesDir-a. Ovo pomaže u strukturiranju podataka po tipovima: slike, dokumenti, izvozni fajlovi. Metod mkdirs() kreira sve nedostajuće direktorijume u putanji, uključujući ugnježdene. Uverite se da je operacija kreiranja uspela — metod vraća true samo pri kreiranju novih direktorijuma. Greška kreiranja je najčešće povezana sa nedostatkom prostora na particiji /data ili iscrpljivanjem inoda sistema fajlova.

kotlin
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
    println("Direktorijum kreiran")
}

val imageFile = File(imagesDir, "photo.jpg")
imageFile.writeBytes(byteArray)

Za proveru raspoloživog prostora pre pisanja velikih fajlova koristite File.getFreeSpace() ili File.getUsableSpace(). Drugi metod vraća broj bajtova dostupnih trenutnoj aplikaciji uzimajući u obzir sigurnosne kvote — precizniji je u kontekstu višekorisničkih uređaja. Ako je raspoloživi prostor manji od očekivane veličine fajla, prikažite korisniku poruku i predložite oslobađanje prostora u podešavanjima uređaja.

Kako raditi sa internom memorijom na iOS-u

Na iOS-u svaka aplikacija radi u izolovanom Sandbox kontejneru. Sistem ne pruža API za izlazak izvan njegovih granica bez posebnih dozvola. Osnovni alat za rad sa sistemom fajlova je klasa FileManager iz Foundation framework-a. Sandbox kontejner uključuje nekoliko standardnih direktorijuma, od kojih svaki ima sopstvenu politiku rezervnog kopiranja.

Pristup Documents direktorijumu kroz FileManager

Documents direktorijum je namenjen korisničkim podacima koji treba da se sačuvaju između pokretanja aplikacije i obnove iz rezervne kopije. iOS automatski uključuje ovaj direktorijum u rezervno kopiranje na iCloud i iTunes. Metod urls(for:in:) vraća niz URL adresa traženog direktorijuma — prvi element niza je glavni.

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 podržava potpuni skup operacija nad fajlovima: kreiranje, kopiranje, premeštanje, brisanje i preimenovanje. Svaka operacija može izazvati grešku, stoga sve pozive treba obmotati u konstrukciju do-catch. Posebnu pažnju posvetite brisanju fajlova — operacija je nepovratna i obnavljanje podataka nakon removeItem(at:) je nemoguće bez prethodne rezervne kopije.

Upravljanje izuzecima iz rezervnog kopiranja

Nisu svi podaci u Sandbox kontejneru potrebni u iCloud rezervnoj kopiji. Na primer, keš preuzetih slika ili privremeni fajlovi obrade ne zahtevaju obnavljanje — oni će biti ponovo kreirani pri sledećem korišćenju. Za isključivanje direktorijuma ili fajla iz rezervnog kopiranja postavite atribut isExcludedFromBackup na true. Apple preporučuje da uvek isključite iz rezerve podatke koji se mogu obnoviti na daljinu, kako biste minimizirali obim iCloud skladišta i skratili vreme obnove.

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

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

Razlike između interne memorije, keša i eksternog skladišta

Svaki tip skladišta na mobilnom uređaju ima svoju namenu i pravila korišćenja. Razumevanje ovih razlika pomaže razvojnom inženjeru da izabere pravo mesto za svaki tip podataka. Ispod je prikazano poređenje tri glavna tipa skladišta dostupnih aplikaciji.

KarakteristikaInternal StorageCache DirectoryExternal Storage
Vidljivost za druge aplikacijeSkrivenaSkrivenaDostupna
Brisanje pri deinstalaciji aplikacijePotpunoPotpunoZavisi od lokacije
Rezervno kopiranjeNa Androidu — ne, na iOS-u — da (Documents)NeSamo pri sinhronizaciji
Dostupnost bez medijaUvekUvekZahteva SD karticu
Rizik od gubitka podatakaMinimalanVisokSrednji
Preporučena veličina fajlovaDo 100 MBDo 50 MBBilo koja

Interna memorija je optimalna za čuvanje konfiguracija aplikacije, fajlova baze podataka i korisničkih dokumenata koji ne treba da budu dostupni drugim programima. Keš direktorijum je namenjen privremenim fajlovima koji se mogu ponovo kreirati pri sledećem korišćenju: preuzete slike, API odgovori, međuobradni podaci. Eksterno skladište je najpogodnije za velike medijske fajlove (fotografije, video, muzika) i podatke koje korisnik želi da deli sa drugim aplikacijama putem zajedničkog pristupa.

Izbor tipa skladišta takođe utiče na rangiranje aplikacije u Google Play i App Store. Aplikacije koje čuvaju velike količine podataka u internoj memoriji bez čišćenja dobijaju negativne recenzije: korisnici se žale na nedostatak prostora. Prema istraživanju App Annie, 62% korisnika briše aplikaciju ako ona zauzima više od 500 MB interne memorije uređaja bez opcije za čišćenje.

Preporuke za korišćenje interne memorije

Pravilno upravljanje internom memorijom aplikacije poboljšava performanse, sigurnost i korisničko iskustvo. Sledeće preporuke su zasnovane na zvaničnoj dokumentaciji Androida i iOS-a, kao i na praktičnom iskustvu razvoja aplikacija sa milionima instalacija.

  • Minimizujte količinu čuvanih podataka. Koristite internu memoriju samo za kritično važne fajlove, ostalo smestite u keš ili na eksterno skladište
  • Redovno čistite privremene fajlove. Proveravajte cache direktorijum pri svakom pokretanju i brišite fajlove starije od 24 sata — ovo smanjuje opterećenje sistema i sprečava prekoračenje particije /data
  • Šifrujte poverljive podatke pomoću EncryptedSharedPreferences ili EncryptedFile iz AndroidX Security biblioteke. Čuvanje tokena i lozinki u otvorenom obliku je često ranjivost koju eksploatišu trojanci sa root pristupom
  • Koristite migraciju prilikom ažuriranja strukture fajlova. Prilikom izdavanja nove verzije aplikacije proveravajte postojanje starih fajlova i premeštajte ih u nove direktorijume pre nego što obrišete stare

Posebnu pažnju posvetite testiranju graničnih slučajeva. Proveravajte ponašanje aplikacije prilikom prekoračenja interne memorije, iznenadnog prekida pisanja (pad aplikacije, poziv) i prilikom obnove iz iOS rezervne kopije. U svakom od ovih scenarija podaci moraju ostati konzistentni ili se obnoviti do poslednjeg stabilnog stanja. Koristite transakcione fajlove: upisujte podatke u privremeni fajl, a zatim ga atomski preimenujte u ciljni fajl. Ovo sprečava čitanje oštećenih podataka prilikom otkaza pisanja.

Ne zaboravite na korisničku kontrolu. Obezbedite u podešavanjima aplikacije opciju za čišćenje privremenih podataka i prikaz zauzetog prostora interne memorije. Prema Google Play konzoli, aplikacije sa takvom funkcijom dobijaju 18% više pozitivnih recenzija u kategoriji „Performanse”.

Često postavljana pitanja

Šta se dešava sa Internal Storage-om nakon brisanja aplikacije?

Svi podaci iz interne memorije aplikacije se potpuno brišu. Operativni sistem garantuje odsustvo preostalih fajlova, uključujući baze podataka, podešavanja i privremene fajlove. Podaci na eksternom skladištu mogu ostati sačuvani.

Može li druga aplikacija pročitati moje fajlove iz Internal Storage-a?

Bez root pristupa uređaju, druge aplikacije ne mogu čitati fajlove iz Internal Storage-a druge aplikacije. Na Androidu su za to potrebne superkorisničke privilegije, a na iOS-u izolacija se obezbeđuje na nivou jezgra kroz Sandbox.

Koja je maksimalna količina podataka koja se može čuvati u internoj memoriji?

Eksplicitnog ograničenja nema, ali ukupna količina je ograničena slobodnim prostorom na /data particiji. Preporučuje se ne prelaziti 100 MB po aplikaciji — veće količine je bolje smestiti na eksterno skladište ili u oblak.

Koja je razlika između filesDir i cacheDir na Androidu?

filesDir je namenjen trajnim podacima aplikacije i sistem ga ne briše bez potrebe. cacheDir je za privremene fajlove koje sistem može obrisati pri nedostatku memorije. Sistem ne garantuje očuvanje cacheDir-a.

Kako preneti podatke iz Internal Storage-a na SD karticu?

Direktno kopiranje iz Internal Storage-a na SD karticu je zabranjeno sigurnosnom politikom. Koristite MediaStore API na Android 10+ ili SAF (Storage Access Framework) za kreiranje kopija podataka u zajedničkom pristupu uz saglasnost korisnika.

Zaključak

  • Internal Storage je izolovani direktorijum svake aplikacije, zaštićen od pristupa drugih programa i korisnika
  • Sandbox arhitektura na Androidu i iOS-u garantuje da se podaci različitih aplikacija ne preklapaju i ne mogu biti pročitani bez root pristupa
  • Izbor metoda skladištenja zavisi od tipa podataka: fajlovi — kroz filesDir, podešavanja — kroz DataStore, strukturisani podaci — kroz Room
  • iOS Sandbox uključuje politiku rezervnog kopiranja koju treba kontrolisati kroz atribut isExcludedFromBackup za nekritične podatke
  • Razlika od keša je u garanciji očuvanosti: Internal Storage sistem ne briše, za razliku od cacheDir koji može biti očišćen pri nedostatku memorije
  • Preporučena količina podataka u internoj memoriji — do 100 MB. Veće fajlove treba smestiti na eksterno skladište ili u servis u oblaku
  • Korisnička kontrola zauzetog prostora i mogućnost čišćenja podataka povećavaju poverenje i rang aplikacije u prodavnicama

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође