参考android.arch.lifecycle.viewmodel类.
viewmodel的范围限定了与其相关的UI组件的生命周期,因此在基于Fragment的应用程序中,这将是片段生命周期.这是一件好事.
在某些情况下,人们希望在多个片段之间共享viewmodel实例.具体而言,我对许多屏幕与相同基础数据相关的情况感兴趣.
(当多个相关片段在同一屏幕上显示但是this can be worked around by using a single host fragment as per answer below时,文档提出了类似的方法.)
这将在official ViewModel documentation中讨论:
viewmodels can also be used as a communication layer between different
Fragments of an Activity. Each Fragment can acquire the viewmodel
using the same key via their Activity. This allows communication
between Fragments in a de-coupled fashion such that they never need to
talk to the other Fragment directly.
换句话说,要在表示不同屏幕的片段之间共享信息,viewmodel应限定为Activity生命周期(根据AndroID文档,这也可以在其他共享实例中使用).
现在,在新的Jetpack导航模式中,建议使用“One Activity / Many Fragments”架构.这意味着活动在应用程序使用的整个过程中都存在.
即任何作用于Activity生命周期的共享viewmodel实例永远不会被清除 – 内存仍然在不断使用.
为了在任何时间点保留内存并尽可能少地使用,最好能够在不再需要时清除共享的viewmodel实例.
如何从viewmodelStore或holder片段手动清除viewmodel?
解决方法:
如果你检查代码here,你会发现,你可以从viewmodelStoreOwner和Fragment,FragmentActivity获取viewmodelStore,例如实现该接口.
从那里你可以调用viewmodelStore.clear(),正如文档所说:
/** * Clears internal storage and notifIEs viewmodels that they are no longer used. */public final voID clear() { for (viewmodel vm : mMap.values()) { vm.clear(); } mMap.clear();}
N.B.:这将清除特定lifeCycleOwner的所有可用viewmodel,这不允许您清除一个特定的viewmodel.
总结以上是内存溢出为你收集整理的手动清除Android ViewModel?全部内容,希望文章能够帮你解决手动清除Android ViewModel?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)