在IO调度器调用SharedPreference.edit().commit()时监听器未接收变更通知的问题咨询
大家好,我最近碰到了一个SharedPreferences监听器不生效的奇怪问题,折腾了好久都没搞明白,想过来请教下各位。
情况是这样的:我在IO协程调度器里修改SharedPreferences的值,代码大概是这样的:
val sharedPreference = PreferenceManager.getDefaultSharedPreferences(context) val scope = CoroutineScope(Dispatchers.IO) scope.launch { val editor = sharedPreference.edit() editor.putString("stringKey", "stringValue") editor.commit() }
同时我也实现了监听器并且完成了注册,代码如下:
class SharedPreferenceChangeListener() : SharedPreferences.OnSharedPreferenceChangeListener { override fun onSharedPreferenceChanged(pref: SharedPreferences, key: String?) { println("SharedPreference.onSharedPreferenceChanged called for $key") } } class SharedPreferenceTest { private val listener = SharedPreferenceChangeListener() private val sharedPreference = PreferenceManager.getDefaultSharedPreferences(context) init { sharedPreference.registerOnSharedPreferenceChangeListener(listener) } }
按道理说,当stringKey的值被修改后,监听器的onSharedPreferenceChanged方法应该会被触发,控制台能看到打印的日志,但实际情况是完全没反应,监听器好像根本没察觉到变化。
我怀疑是不是因为我用了Dispatchers.IO调度器导致的?有没有大佬能帮忙分析下这个问题的原因呀?
内容来源于stack exchange
相关产品推荐
相关产品推荐

