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)