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
相关产品推荐
相关产品推荐

