Можете объяснить, что такое 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').
Шаги работы такие:
- Получить экземпляр хранилища.
- Записать значение по уникальному ключу.
- При следующем запуске приложения прочитать значение по этому же ключу.
- Если ключа нет, чтение вернёт
nullили значение по умолчанию в зависимости от метода.
Ключевые моменты:
- Подходит только для небольших объёмов данных и простых типов.
- Данные сохраняются локально и переживают перезапуск приложения.
- Обычно используют для настроек, флагов и пользовательских предпочтений.
- Это не решение для чувствительных данных: для токенов и секретов нужны более безопасные механизмы.
- В Flutter доступ обычно идёт через плагин
shared_preferences. - Для сложных данных лучше использовать JSON-файлы, SQLite, Hive или другую БД/хранилище.