SharedPreferences предлагает структуру для сохранения постоянных данных в парах "ключ-значение". Он работает с любым примитивным типом данных (имеется в виду логические, целые, длинные, числа с плавающей запятой и строки). Это также означает, что с ним довольно просто работать.

Шаг 1. Получите объект SharedPreferences

Прежде всего, чтобы использовать SharedPreferences, вам необходимо получить дескриптор SharedPreferences. Поскольку фреймворк обрабатывает эти данные за вас (вот что делает их постоянными!), Вам нужен путь к хранилищу фреймворка.

Вызов getSharedPreferences () позволяет получить файл по имени, что означает, что у вас может быть несколько файлов. Это хорошо настроит вас для резервного копирования приложений в Android 6.0, поскольку вы сможете включать / исключать файлы из резервного копирования приложений, ссылаясь на их имя. Например, вы определенно хотите создать резервную копию файла пользовательских настроек, но, вероятно, не файла prefs, в котором хранятся идентификаторы GCM.

SharedPreferences sharedPref =
    context.getSharedPreferences("TheFileName",
        Context.MODE_PRIVATE);

Если вы ненавидите супер-отличные функции, такие как резервное копирование приложений, или если вам действительно нужно хранить только два значения, тогда вы можете вместо этого использовать getDefaultSharedPreferences (). Это не позволяет использовать именованный файл настроек, но им очень легко пользоваться. Также есть возможность вызвать getPreferences () через Activity, и этот файл настроек будет привязан только к определенному Activity. Но это также означает, что у него не будет имени, и вы не сможете указать, следует ли включать или исключать этот файл из резервного копирования приложений.

Примечание. Ваши данные SharedPreferences могут _технически_ быть частными или общими, в зависимости от того, что вы указываете при получении обработчика. Однако вы всегда должны использовать только MODE_PRIVATE. Настоятельно не рекомендуется создавать файлы, доступные для чтения / записи. Мы даже исключили эти константы, чтобы подчеркнуть свою точку зрения.

Шаг 2. Запишите в SharedPreferences

Как и следовало ожидать, запись в SharedPreferences проста. Поскольку идея всего этого подхода заключается в простом хранении простых данных. Но все начинается с приобретения Редактора. Затем вы можете вставить данные, вызвав соответствующий метод put (например, putString () для хранения значения String). Какой бы поставить вы ни выбрали, вам потребуются два параметра: строковый ключ и значение ‹type›. И затем, конечно же, вызовите apply (), чтобы сохранить изменения!

Примечание. Технически сохранение изменений имеет два варианта: apply () и commit (). Большинство разработчиков захотят использовать apply (), поскольку он записывает изменения из основного потока. Пока commit () записывает в постоянное хранилище синхронно, apply () немедленно записывает в хранилище в памяти и планирует асинхронную запись в постоянное хранилище. Помните: запись общего предпочтения - это дисковый ввод-вывод, поэтому используйте apply (), чтобы не допустить этого в основной поток. #perfmatters

SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("music on", false);
editor.apply();

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

Шаг 3. Прочтите из SharedPreferences

Считать значение просто. Вам просто нужно снова вызвать соответствующий метод get. Итак, вызов getString () вернет значение String, связанное с этим ключом.

boolean musicState = sharedPref.getBoolean("music on", true);

Что интересно, так это параметр default value (он второй наверху). Это значение будет возвращено, если указанное предпочтение не существует. Это означает, что вы можете использовать это как сигнал о том, что предпочтение отсутствует или его необходимо установить. Или, вы можете использовать значение по умолчанию, чтобы ваше приложение продолжало двигаться. У вас всегда будет ценность, с которой можно поработать, поэтому работа приложения никогда не будет прервана.

Также полезно прочитать любые значения состояния во время onCreate (), а затем сбросить эти значения в своем приложении, чтобы при запуске приложения вы были уверены, что пользователь не удивится, что фоновая музыка возобновил игру. (Создавайте волшебные моменты, а не сюрпризы!)

Но как насчет PreferenceActivity?

Итак, давайте рассмотрим это. PreferenceActivity предназначен для того, чтобы вы могли постоянно создавать и сохранять пользовательские настройки (например, какой рингтон использовать). Итак, разве это не лучше и мощнее, чем SharedPreferences?

Во-первых, PreferenceManager в этом источнике использует SharedPreferences. Так что все равно. Но использование PreferenceActivity позволит вам легко управлять большим списком предпочтений и поддерживать его. Так что, если вам интересно, начните с предложения Иэна Лейка о Библиотеке поддержки предпочтений.

Так что попрощайтесь с разрешениями на хранилище и сохраните небольшой объем данных в парах ключ-значение!

#BuildBetterApps

Следите за коллекцией шаблонов разработки для Android, чтобы узнать больше!