Как насчет того, чтобы поместить его в хороший класс, и когда вы просто инициализируете этот класс из своей деятельности: speedKeeper = MaxSpeedKeeper(this)
, тогда все, что вам нужно сделать, - это понизить вашу скорость (т.е. speedKeeper.speed = 10.4
), и она останется обновленной.Apply()
обновится до дисковой асинхронности, но значение в инициализированном sharedPref
останется в кеше и все равно будет считано из companion object
'maxSpeed
.
Таким образом, вы можете просто удалить speedkeeper
в любых других процессах, классах, фрагментах и т. Д., И он будет продолжать делать то, что делает, или просто инициализировать его снова в новом действии.
class MaxSpeedKeeper(context: Context) {
companion object {
const val SPEED = "SPEED"
const val SHAREDPREFS_NAME = "MY_SHAREDPREFS"
var maxSpeed = 0.0f
}
var speed: Double
get() = maxSpeed.toDouble()
set(speedToCheck) {
if (speedToCheck > maxSpeed) {
maxSpeed=speedToCheck.toFloat()
with(sharedPref.edit()) {
putFloat(SPEED, speedToCheck.toFloat()) // you could change this to a string or bits or something if you want more resolution than a float gives
apply()
}
}
}
private val sharedPref =
context.getSharedPreferences(SHAREDPREFS_NAME, Context.MODE_PRIVATE)
init {
maxSpeed = sharedPref.getFloat(SPEED, 0.0f)
}
}