Збереження даних в мобільній розробці — що це, способи та як працює

Автор: 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 — це здатність додатка зберігати дані в енергонезалежній пам’яті пристрою. У мобільній розробці постійне зберігання охоплює бази даних, файлову систему, налаштування та кеш. Кожен механізм має свої особливості продуктивності, безпеки та обсягу інформації, що зберігається.

Тимчасові та постійні дані

Тимчасові дані існують тільки в оперативній пам’яті та втрачаються при завершенні процесу. До них належать стан екрана, тимчасові обчислення та кеш зображень. Постійні дані записуються в файлову систему або базу даних і залишаються доступними після перезапуску додатка. До них належать налаштування користувача, токени авторизації, історія операцій та завантажений контент.

Критерії вибору механізму зберігання

При виборі способу збереження розробник оцінює кілька факторів. Тип даних визначає структуру зберігання: прості налаштування — 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 — вбудована реляційна база даних, яка працює всередині процесу додатка без окремого сервера. Це найпоширеніша СУБД в мобільній розробці: вона використовується типово на обох платформах. 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("Save error: \(error)")
        }
    }
}

Файлове зберігання (File Storage) використовується для збереження зображень, відео та документів. Android надає внутрішнє сховище (context.filesDir) — приватне для додатка, та зовнішнє (Environment.getExternalStorageDirectory) — доступне іншим додаткам. На iOS файли зберігаються в директоріях Documents та Library, причому Library/Caches призначено для кешу, що не підлягає резервному копіюванню в iCloud. Для роботи з файлами обидві платформи надають File API та потокові операції читання та запису. Сучасні бібліотеки на кшталт Coil та SDWebImage додають шар кешування, комбінуючи файлове зберігання з оперативною пам’яттю для оптимальної продуктивності.

На 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також