You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在IO调度器调用SharedPreference.edit().commit()时监听器未接收变更通知的问题咨询

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:37:57