Sobes.tech
Назад к вопросам
Junior — Middle
99

Можете объяснить, что такое SharedPreferences и как оно используется для хранения данных в Android приложениях?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

SharedPreferences — это простой способ хранить небольшие пары ключ-значение локально на устройстве. Обычно его используют для настроек, флагов и небольших пользовательских данных, которые должны переживать перезапуск приложения. Для больших объёмов данных или сложной структуры он не подходит.

Определение:

SharedPreferences — это механизм постоянного хранения простых данных в Android, где информация сохраняется как набор key-value. В контексте Flutter чаще говорят о доступе к этому хранилищу через плагин, который позволяет читать и записывать примитивные значения: строки, числа, булевы значения и списки строк.

Это не база данных и не файловое хранилище общего назначения. Его задача — быстро и удобно сохранять небольшие настройки приложения.

Пример использования:

Типичный пример — сохранение признака, что пользователь уже прошёл onboarding, или сохранение выбранной темы приложения.

import 'package:shared_preferences/shared_preferences.dart';

Future<void> saveTheme(String theme) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('theme', theme);
}

Future<String?> loadTheme() async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.getString('theme');
}

Future<void> markOnboardingDone() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setBool('onboarding_done', true);
}

Пояснение кода:

В примере сначала вызывается SharedPreferences.getInstance(), чтобы получить доступ к локальному хранилищу. Затем данные записываются по ключу: setString('theme', theme) или setBool('onboarding_done', true). При чтении используется тот же ключ, например getString('theme').

Шаги работы такие:

  1. Получить экземпляр хранилища.
  2. Записать значение по уникальному ключу.
  3. При следующем запуске приложения прочитать значение по этому же ключу.
  4. Если ключа нет, чтение вернёт null или значение по умолчанию в зависимости от метода.

Ключевые моменты:

  • Подходит только для небольших объёмов данных и простых типов.
  • Данные сохраняются локально и переживают перезапуск приложения.
  • Обычно используют для настроек, флагов и пользовательских предпочтений.
  • Это не решение для чувствительных данных: для токенов и секретов нужны более безопасные механизмы.
  • В Flutter доступ обычно идёт через плагин shared_preferences.
  • Для сложных данных лучше использовать JSON-файлы, SQLite, Hive или другую БД/хранилище.