Чување података у мобилном развоју — шта је то, начини и како функционише

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

Трајно чување података обезбеђује очување корисничких информација између сесија рада мобилне апликације. Без ове технологије, свако покретање програма почињало би од нуле — подешавања, историја и преузети фајлови би се губили при затварању. Према подацима Google Developers, 2024, више од 90% мобилних апликација користи бар један механизам трајног чувања за очување корисничких података и стања интерфејса.

Главне тачке

  • Data Persistence — механизми чувања података између сесија апликације
  • SharedPreferences — чување једноставних парова кључ-вредност на Android-у
  • SQLite — уграђена релациона база података за мобилне уређаје
  • Room — ORM омотач изнад SQLite-а од Google-а за Android
  • Core Data — оквир за управљање објектима на iOS и macOS

Шта је трајно чување података

Data Persistence — способност апликације да чува податке у неиспарљивој меморији уређаја. У мобилном развоју, трајно чување обухвата базе података, фајл систем, подешавања и кеш меморију. Сваки механизам има своје карактеристике перформанси, безбедности и обима ускладиштених информација.

Привремени и трајни подаци

Привремени подаци постоје само у RAM меморији и губе се при завршетку процеса. У њих спадају стање екрана, привремена израчунавања и кеш меморија слика. Трајни подаци се уписују у фајл систем или базу података и остају доступни након поновног покретања апликације. У њих спадају корисничка подешавања, токени за ауторизацију, историја операција и преузети садржај.

Критеријуми за избор механизма чувања

При избору начина чувања, програмер процењује неколико фактора. Тип података одређује структуру чувања: једноставна подешавања — SharedPreferences или DataStore, структурирани записи — SQLite или Room, фајлови — File Storage. Обим података утиче на перформансе: базе података су оптимизоване за хиљаде записа, а фајлови за велике бинарне објекте. Безбедност захтева шифровање осетљивих информација путем EncryptedSharedPreferences или SQLCipher-а.

kotlin
data class StorageOption(
    name: String,
    dataType: StorageType,
    capacity: Long,
    secure: Boolean
)

enum class StorageType {
    KEY_VALUE,
    RELATIONAL,
    FILE
}

SharedPreferences и DataStore

SharedPreferences — класичан начин чувања парова кључ-вредност на Android-у. Овај API постоји од првих верзија платформе и подржава примитивне типове: стрингове, бројеве, булове вредности. Подаци се чувају у XML фајлу у приватном директоријуму апликације и доступни су само њеном процесу.

DataStore као алтернатива

Jetpack DataStore — модерна замена за SharedPreferences, изграђена на Kotlin Coroutines и Flow. DataStore нуди две варијанте: Preferences DataStore за једноставне вредности и Proto DataStore за типизиране објекте. За разлику од SharedPreferences, DataStore гарантује конзистентност података при конкурентном приступу и подржава асинхроне операције без блокирања главне нити.

kotlin
// SharedPreferences — традиционални начин
val prefs = context
    .getSharedPreferences("settings", Context.MODE_PRIVATE)
with (prefs.edit()) {
    putString("username", "john_doe")
    putInt("score", 1500)
    apply()
}

// DataStore — асинхрони приступ
val settingsDataStore = context
    .createDataStore("settings.pb")

val usernameFlow: Flow<String> = settingsDataStore
    .data
    .map { it[USERNAME_KEY] ?: "" }

На iOS-у еквивалент SharedPreferences-а је UserDefaults — систем чувања једноставних вредности у Property List формату. UserDefaults користи синхрони приступ и погодан је за мале количине конфигурационих података, али се не препоручује за чување осетљивих информација.

SQLite у мобилним апликацијама

SQLite — уграђена релациона база података која ради унутар процеса апликације без посебног сервера. Ово је најраспрострањенији DBMS у мобилном развоју: подразумевано се користи на обе платформе. Android укључује SQLite у SDK, а iOS у библиотеку libsqlite3. SQLite подржава стандардни SQL, трансакције, индексе и окидаче.

Креирање табеле и CRUD операције

Рад са SQLite-ом почиње креирањем шеме базе података. Програмер дефинише табеле, њихова поља и типове, након чега изводи операције уметања, читања, ажурирања и брисања. SQLiteOpenHelper на Android-у управља креирањем и миграцијама базе, а на iOS-у се користи C интерфејс или FMDB омотач.

kotlin
// SQLiteOpenHelper на Android-у
class DBHelper(context: Context) :
    SQLiteOpenHelper(context, "app.db", null, 1) {

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("""
            CREATE TABLE users (
                id INTEGER PRIMARY KEY,
                name TEXT NOT NULL,
                email TEXT UNIQUE
            )
        """)
    }

    fun insertUser(name: String, email: String) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put("name", name)
            put("email", email)
        }
        db.insert("users", null, values)
    }
}
Тип податакаSharedPreferencesSQLiteФајл систем
Типкључ-вреднострелациона БПбинарни фајлови
Обимстотине записахиљаде записадоступан простор
Перформансевисокесредњезависи од величине
Типична применаподешавањаструктурирани подацислике, видео

Room — ORM за Android

Room — библиотека из састава Jetpack-а, која пружа ORM слој изнад SQLite-а. Room елиминише рутински посао писања SQL упита и ContentValues, замењујући их анотацијама и Kotlin функцијама. Компајлер Room-а генерише имплементацију DAO (Data Access Object) у фази изградње, што искључује грешке у SQL синтакси.

Подешавање Room-а у пројекту

За повезивање Room-а потребно је додати зависност kapt и анотирати класу ентитета, DAO интерфејс и класу базе података. RoomDatabase служи као улазна тачка: преко њега се добија DAO и извршавају операције са базом. Room подржава Flow за реактивне упите, миграције шеме и проверу упита у фази компајлације.

kotlin
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "full_name") val name: String,
    @ColumnInfo val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<User>>

    @Insert
    suspend fun insert(user: User)

    @Delete
    suspend fun delete(user: User)
}

@Database(
    entities = [User::class],
    version = 1
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Core Data — iOS оквир

Core Data — Apple оквир за управљање графом објеката и њихово чување на диску. За разлику од Room-а, Core Data не ради са табелама, већ са управљаним објектима (NSManagedObject) који формирају хијерархију веза. Core Data подржава лењо учитавање, поништавање измена и сложене упите преко NSFetchRequest-а.

Core Data Stack

Основу Core Data чини стек од три компоненте: управљани контекст (NSManagedObjectContext), трајно складиште (NSPersistentStoreCoordinator) и модел података (NSManagedObjectModel). NSPersistentContainer обједињује све компоненте у јединствену улазну тачку, поједностављујући подешавање за модерне апликације у Swift-у.

swift
import CoreData

class PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentContainer

    init() {
        container = NSPersistentContainer(name: "AppModel")
        container.loadPersistentStores { _, error in
            if let error = error {
                fatalError("Failed: \(error)")
            }
        }
    }

    func saveUser(name: String, email: String) {
        let context = container.viewContext
        let user = User(context: context)
        user.name = name
        user.email = email

        do {
            try context.save()
        } catch let error {
            print("Грешка при чувању: \(error)")
        }
    }
}

Чување фајлова (File Storage) користи се за чување слика, видеа и докумената. Android пружа интерну меморију (context.filesDir) — приватну за апликацију, и екстерну (Environment.getExternalStorageDirectory) — доступну другим апликацијама. На iOS-у фајлови се чувају у директоријумима Documents и Library, при чему је Library/Caches намењена кешу који се не бекапује у iCloud. За рад са фајловима обе платформе пружају File API и операције стримовног читања и писања. Модерне библиотеке попут Coil и SDWebImage додају слој кеширања, комбинујући фајл систем са RAM меморијом за оптималне перформансе.

На Android-у алтернатива Core Data-ју по сложености и функционалности је Realm — објектно-оријентисана база података која ради директно са моделима без SQL слоја. Realm је бржи од SQLite-а у операцијама читања и подржава live-објекте који аутоматски ажурирају UI при промени података.

Често постављана питања

Шта је Data Persistence у мобилном развоју?

Data Persistence — механизми чувања података у неиспарљивој меморији уређаја који обезбеђују њихову доступност након поновног покретања апликације. У њих спадају базе података, фајл систем и системи подешавања.

По чему се Room разликује од директног коришћења SQLite-а?

Room је ORM омотач изнад SQLite-а који елиминише ручно писање SQL упита и ContentValues. Room проверава SQL упите у фази компајлације, подржава Kotlin Coroutines и Flow, и аутоматски генерише код за приступ подацима.

Када треба користити SharedPreferences?

SharedPreferences је погодан за чување мале количине једноставних података: подешавања апликације, заставице, идентификаторе и корисничке преференце. За сложене или структуриране податке боље је користити Room или DataStore.

Шта је Core Data на iOS-у?

Core Data — Apple оквир за управљање графом објеката. Он пружа рад са управљаним објектима, праћење измена, лењо учитавање и аутоматско чување у трајно складиште (SQLite, XML или бинарни формат).

Који начин чувања података изабрати за нови пројекат?

Избор зависи од сложености података: за подешавања — DataStore или UserDefaults, за структуриране записе — Room (Android) или Core Data (iOS), за фајлове — File Storage. Критеријуми укључују обим података, захтеве за перформансама и потребу за шифровањем. Комбиновање више механизама у једној апликацији је стандардна пракса која омогућава оптимално коришћење предности сваког приступа.

Резиме

  • Data Persistence — основа сваке мобилне апликације, обезбеђује очување корисничких података између сесија
  • SharedPreferences и UserDefaults — једноставни системи за чување парова кључ-вредност са синхроним приступом
  • SQLite — уграђена релациона база података доступна на обе платформе без додатних зависности
  • Room — ORM решење од Google-а, обезбеђује сигурност типова и реактивне упите преко Flow-а
  • Core Data — моћан Apple оквир за управљање сложеним графовима објеката са аутоматским праћењем измена
  • DataStore — модерна алтернатива SharedPreferences-у са асинхроним API-јем заснованим на Coroutines и Flow

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

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

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

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