繁体   English   中英

navGraph viewModel 如何在后台工作?

[英]how does navGraph viewModel work under the hood?

所以我的问题很简单。 viewmodel 需要一个 scope 才能存活。 例如活动或片段。 所以我想一定有一个navgraph与通过多个片段存活的导航图相关联。那么它是如何实现的?

val viewModel by navGraphViewModels(R.id.my_nav_graph).

根据参考使用 NavBackStackEntry 文档的目的地

从 Navigation 2.2.0 开始,您可以通过调用NavController.getBackStackEntry()对导航堆栈上任何目的地的NavBackStackEntry的引用,并将目的地 ID 传递给它。

返回的NavBackStackEntry在目标级别提供Lifecyclea ViewModelStore和 SavedStateRegistry 。 这些对象在后端堆栈上的目标的生命周期内有效。 当关联的目的地从返回堆栈中弹出时,生命周期被销毁,state 不再保存,并且所有 ViewModel 对象都被清除。

因此,当您by navGraphViewModels()调用时,将使用该导航图的NavBackStackEntry 当您位于该图中的任何目的地时, NavBackStackEntry仍保留在后堆栈上,因此无论您by navGraphViewModel()调用该图中的哪个目的地,都会返回相同的NavBackStackEntry ,确保这些多个片段都具有共享scope。 一旦您从返回堆栈中弹出所有片段,导航图及其NavBackStackEntry也会弹出,清除共享的 state。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM