Хранение данных в мобильной разработке — что это, способы и как работает

Автор: 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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