【发布时间】:2018-05-29 10:19:01
【问题描述】:
我想使用 kotlin 在 android 中为我的 SharedPreference 创建一个辅助类。
不幸的是,我需要Context,而且我不想在每次调用首选项时都将其设置为参数。
如果我为上下文使用伴随对象并在应用程序启动时设置它,我会收到以下错误:Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)
那么如何在每次调用首选项时获取上下文而不传递它?
var isWorking: Boolean
get() = getBoolean(IS_WORKING)
set(isWorking) = setPreference(IS_WORKING, isWorking)
private fun setPreference(key: String, value: Boolean) {
val editor = settings.edit()
editor.putBoolean(key, value)
editor.commit()
}
private val settings: SharedPreferences by lazy {
context.getSharedPreferences("prefs", Context.MODE_PRIVATE)
}
【问题讨论】:
-
这不能回答你的问题,但你应该每次都传递上下文。正如消息所说,如果活动完成时操作仍在运行,则活动可能会泄漏。根据我的经验,我总是看到 PreferenceHelper 类在进行某些操作时接收上下文。
-
像我一样使用 Kotlin 扩展 here
标签: android kotlin sharedpreferences android-context