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

LiveData未在LifecycleOwner切换至活跃状态时触发回调问题

LiveData回调仅触发一次的问题

问题背景

LiveData的设计特性是,当LifecycleOwner从不活跃状态切换至活跃状态时,会触发回调。针对一次性事件场景,通常会使用SingleLiveEvent或Event包装类来处理。

遇到的问题

我遇到的情况是:LiveData的回调仅在首次触发后,后续状态切换时不再触发。我为此准备了一个示例项目复现该问题。

示例代码

MainActivity代码

class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by lazy {
        ViewModelProvider(this)[MainViewModel::class.java]
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<View>(R.id.tv).setOnClickListener {
            startActivity(Intent(this, MainActivity2::class.java))
        }
        viewModel.liveData.observe(this) {
            Toast.makeText(this, it, Toast.LENGTH_LONG).show()
        }
    }
}

ViewModel代码

class MainViewModel: ViewModel() {

    val liveData = MutableLiveData<String>("Random value")
}

现象描述

应用启动时,会正常显示Toast;但启动MainActivity2后返回,或者应用进入后台再回到前台时,Toast不再显示。

内容的提问来源于stack exchange,提问作者Parth Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:15:37