Вам не нужно писать x = singleton
, я написал это в своем комментарии просто как способ спросить вас, какова ваша реальная потребность.
Вы обязательно должны использовать SharedPreferences
для постоянного хранения,но вы также можете сохранить простой синтаксис singleton.propertyName
.Вы просто должны реализовать собственные методы получения.Вот некоторые фрагменты, которые я использую:
val Context.sharedPrefs: SharedPreferences get() =
PreferenceManager.getDefaultSharedPreferences(this)
val SharedPreferences.lastReloadedTimestamp: Long get() =
getLong(KEY_LAST_RELOADED_TIMESTAMP, 0L)
fun SharedPreferences.Editor.setLastReloadedTimestamp(value: Long): SharedPreferences.Editor =
putLong(KEY_LAST_RELOADED_TIMESTAMP, value)
inline fun SharedPreferences.applyUpdate(block: SharedPreferences.Editor.() -> Unit) {
with (edit()) {
try {
block()
} finally {
apply()
}
}
}
Я не использую одноэлементный объект, но реализую все как функцию расширения на Context
.Я считаю, что это более безопасный способ, чем один раз загрузить префы в ОЗУ, а затем пропустить возможные обновления при жизни приложения.
Обратите внимание, что для установки свойств я не использую пользовательский установщик, а скорее функцию расширенияна Editor
.Это позволяет мне сгруппировать несколько обновлений в одной транзакции по общим префиксам:
context.sharedPrefs.applyUpdate {
setLastReloadedTimestamp(System.currentTimeMillis())
setLocationLat(location.lat)
setLocationLon(location.lon)
}