SharedPreferences.OnSharedPreferenceChangeListener
这是当SharedPreferences
改变时的回调,是SharedPreferences
的一个接口,如下实现
//编写回调
private val callback
= SharedPreferences.OnSharedPreferenceChangeListener{
sharedPreferences, key ->
//Your code
}
官方文档,说的很清楚了
Called when a shared preference is changed, added, or removed.
This may be called even if a preference is set to its existing value.
This callback will be run on your main thread.
#registerOnSharedPreferenceChangeListener
通过sharedPreferences
的这个方法添加回调
//注册监听
mSharedPreferences.registerOnSharedPreferenceChangeListener(callback)
由于官方文档这样说
The preference manager does not currently store a strong reference to the listener. You must store a strong reference to the listener, or it will be susceptible to garbage collection. We recommend you keep a reference to the listener in the instance data of an object that will exist as long as you need the listener.
翻译过来,简而言之,就是说如果你用匿名对象也就是下面这样,可能会被当作垃圾回收,导致会回调一次你的callback,达不到监听的效果。推荐实例化一个OnSharedPreferenceChangeListener
对象,并且能够保存这个对象的引用
//匿名回调
mSharedPreferences.registerOnSharedPreferenceChangeListener{
sharedPreferences: SharedPreferences, key: String ->
//Your code
}
所以上面代码不可取,于是对于OnSharedPreferenceChangeListener
对象,我是在Activity
初始化阶段就实例化了,如下
class MyActivity : AppCompatActivity(){
private val callback = SharedPreferences.OnSharedPreferenceChangeListener{
sharedPreferences, key ->
//Your code
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//设置监听
mSharedPreferences.registerOnSharedPreferenceChangeListener(callback)
}
}