手动清除Android ViewModel?

手动清除Android ViewModel?,第1张

概述参考android.arch.lifecycle.ViewModel类.ViewModel的范围限定了与其相关的UI组件的生命周期,因此在基于Fragment的应用程序中,这将是片段生命周期.这是一件好事.在某些情况下,人们希望在多个片段之间共享ViewModel实例.具体而言,我对许多屏幕与相同基础数据相关的情况感兴趣.(

参考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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1098625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存