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

В мобильных приложениях локальные данные могут храниться в нескольких формах в зависимости от типа данных, частоты доступа, объёма и требований к структуре. Для 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. Все эти форматы требуют тестирования миграций при обновлении приложения.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/mobile/v-kakom-vide-khranyatsya-dannye-v-mobilnykh-prilozheniyakh-lokalno.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
