SharedPreferenceをシングルトンで保持しておく事はよくあるのでメモ。
object SampleSingleton {
private const val NAME = "SampleSingleton"
private const val MODE = Context.MODE_PRIVATE
private lateinit var preferences: SharedPreference
private val IS_SAMPLE_VALUE = Pair("is_sample_value", false)
fun init(context: Context) {
preferences = context.getSharedPreferences(NAME, MODE)
}
private inline fun SharedPreference.edit(operation: (SharedPreference.Editor) -> Unit) {
val editor = edit()
operation(editor)
editor.apply()
}
// values
var isSampleValue: Boolean
get() = preferences.getBoolean(IS_SAMPLE_VALUE.first, IS_SAMPLE_VALUE.second)
set(value) = preferences.edit { it.putBoolean(IS_SAMPLE_VALUE.first, value) }
}
Application()を継承したクラスを作っておくと自動的にアプリが起動した時に呼ばれ、
アプリが終了するまでこのクラスは保持されるので、ここでシングルトンクラスを生成する。
class SampleApp : Application() {
override fun onCreate() {
super.onCreate()
SampleSingleton.init(this)
}
}
利用するときは以下の様になる。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!SampleSingleton.isSampleValue) {
SampleSingleton.isSampleValue = true
}
}
}
0 コメント