Android: SharedPreference React Programming,监听SharedPreference

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)
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43709922/article/details/104888163