В каком виде хранятся данные в мобильных приложениях локально?

В мобильных приложениях локальные данные могут храниться в нескольких формах в зависимости от типа данных, частоты доступа, объёма и требований к структуре. Для Android чаще всего используются следующие варианты:


1. SharedPreferences

  • Формат: XML-файл, ключ-значение.

  • Использование: небольшие данные настроек и состояния (например, токены, флаги, настройки пользователя).

  • Хранение: приватно в /data/data/<package_name>/shared_prefs/.

  • Особенности: быстро читается/записывается, но не подходит для больших объёмов данных или сложных структур.


2. Файловое хранилище

  • Формат: текстовые файлы (JSON, XML, CSV), бинарные файлы (изображения, аудио, видео).

  • Использование: кэш, экспорт/импорт данных, большие blob-объекты.

  • Хранение: внутреннее (/data/data/<package_name>/files/) или внешнее (/storage/emulated/0/Android/data/<package_name>/files/).

  • Особенности: приложение управляет структурой, нужно заботиться о сериализации/десериализации и безопасности (шифрование при необходимости).


3. SQLite / Room

  • Формат: реляционная база данных.

  • Использование: структурированные данные, отношения между сущностями, сложные запросы.

  • Хранение: файл базы данных в /data/data/<package_name>/databases/<dbname>.

  • Особенности:

    • Room — обёртка над SQLite, добавляет type safety, миграции, аннотации для DAO.

    • Подходит для кэширования больших объёмов данных, истории, настроек с отношениями.


4. ContentProvider

  • Формат: абстракция доступа к данным (может использовать SQLite, файлы, SharedPreferences).

  • Использование: общий доступ к данным другим приложениям.

  • Особенности: через CRUD API (query(), insert(), update(), delete()).


5. Кэш / Temporary storage

  • Формат: файлы или SQLite.

  • Использование: временные данные, которые можно восстановить или загрузить заново (например, изображения, сетевые ответы).

  • Хранение: внутренний кэш /data/data/<package_name>/cache/ или внешний /storage/.../cache/.

  • Особенности: система может очищать при нехватке памяти; данные считаются непостоянными.


6. Other options

  • EncryptedSharedPreferences / SQLCipher: для хранения конфиденциальных данных.

  • Preferences DataStore / Proto DataStore: современная замена SharedPreferences с типобезопасностью и поддержкой Kotlin Flow.

  • Key-Value Stores: MMKV (Tencent), RocksDB — высокопроизводительное локальное хранилище.


7. Общие заметки

  • Все внутренние хранилища приватны приложению.

  • Доступ к внешнему хранилищу требует разрешений (READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE или scoped storage API).

  • Выбор формата зависит от:

    • объёма данных,

    • структуры,

    • требований к скорости,

    • необходимости синхронизации и шифрования.


В результате, локально данные могут существовать в виде XML (SharedPreferences), JSON/бинарных файлов, реляционных таблиц SQLite/Room или абстрактно через ContentProvider. Все эти форматы требуют тестирования миграций при обновлении приложения.

Last updated

Was this helpful?