Android生命周期感知组件如何检测ViewModel内的配置更改

Android生命周期感知组件如何检测ViewModel内的配置更改,android,android-lifecycle,android-jetpack,android-viewmodel,android-configchanges,Android,Android Lifecycle,Android Jetpack,Android Viewmodel,Android Configchanges,我的片段: class FirstFragment : Fragment() { private lateinit var binding: FragmentFirstBinding private lateinit var viewModelFactory: FirstViewModelFactory private lateinit var viewModel: FirstViewModel override fun onCreateView(inflate

我的
片段

class FirstFragment : Fragment() {
    private lateinit var binding: FragmentFirstBinding
    private lateinit var viewModelFactory: FirstViewModelFactory
    private lateinit var viewModel: FirstViewModel

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_first, container, false)
        viewModelFactory = FirstViewModelFactory(requireActivity().application, this.lifecycle) //<- Lifecycle object
        viewModel = ViewModelProvider(this, viewModelFactory).get(FirstViewModel::class.java)

        return binding.root
    }
}
上述设置在无配置更改的环境中运行良好,
showOnStopMessage()
在应用程序进入后台时调用,
showOnStartMessage()
在应用程序返回前台时调用

问题是,当发生配置更改时(如旋转屏幕),这些函数将不再被调用


为什么会发生这种情况?如何检测和“生存”配置更改?提前感谢。

据我所知,问题是您的ViewModel只创建了一次(应该是这样的),并且它只将第一个片段的生命周期添加为LifecycleObserver。当您旋转屏幕时,将返回相同的ViewModel,并且它仍将尝试对旧片段的更改做出反应,但这不会发生

我建议不要在ViewModel中处理生命周期(从工厂和ViewModel中删除相关代码)。只要打电话:

lifecycle.addObserver(viewModel)

获取ViewModel后,立即进入onCreateView。

Android ViewModel将持续存在,直到活动被销毁,并在配置更改中幸存下来。@Brugui它与生命周期感知组件有什么关系?可能对你有帮助哇,我看到,在配置更改后,
LifecycleOwner
(即
片段
)被销毁并重新创建,以及它的
生命周期
对象,但我的
视图模型
仍然保留着以前的
生命周期
对象,这也难怪!非常感谢你!确切地没问题。
lifecycle.addObserver(viewModel)