Используйте apply()
вместо commit()
рекомендуется , чтобы использовать Editor.apply()
вместо commit()
, поскольку apply()
работает асинхронно в фоновом режиме, поэтомуменее вероятно, что из-за этого возникнет ANR.
getSharedPreferences("FILE_NAME", 0 /*FILE_MODE*/)
.edit()
.putString("password", "new value")
.apply();
Документы упоминают о apply()
,
Подтвердите ваши предпочтениявозвращается из этого редактора в объект SharedPreferences, который он редактирует.Это атомарно выполняет запрошенные изменения, заменяя все, что в настоящее время находится в SharedPreferences.
Обратите внимание, что, когда два редактора изменяют настройки одновременно, побеждает последний, вызвавший приложение.
В отличие от commit (), который синхронно записывает свои предпочтения в постоянное хранилище, apply () немедленно фиксирует свои изменения в SharedPreferences в памяти, но запускает асинхронную фиксацию на диск , и вы не будете уведомлены о любых сбоях.Если другой редактор этого SharedPreferences выполняет обычную commit (), а apply () еще не выполнено, commit () будет блокироваться до тех пор, пока не будут выполнены все асинхронные коммиты, а также сам коммит.Для отдельных синглов внутри процесса можно безопасно заменить любой экземпляр commit () на apply (), если вы уже игнорировали возвращаемое значение.
Вам не нужно беспокоиться о жизненных циклах компонентов Android и их взаимодействии с apply() запись на диск.Инфраструктура гарантирует, что запись на диск в полете от apply () завершится до переключения состояний.