当前位置: 首页 > 知识库问答 >
问题:

手动清除Android ViewModel?

公良琛
2023-03-14

编辑:这个问题有点过时了,因为Google已经允许我们将viewmodel作用于导航图。更好的方法(而不是试图清除活动范围的模型)是为适量的屏幕创建特定的导航图,并将其范围扩大到这些屏幕。

引用Android.arch.Lifecycle.ViewModel类。

viewmodel的范围是与之相关的UI组件的生命周期,因此在基于fragment的应用程序中,这将是片段生命周期。这是件好事。

在官方的ViewModel文档中对此进行了讨论:

ViewModels还可以用作活动不同片段之间的通信层。每个片段可以通过它们的活动使用相同的键来获取ViewModel。这允许以解耦合的方式在片段之间进行通信,这样它们就不需要直接与其他片段进行通信。

换句话说,为了在表示不同屏幕的片段之间共享信息,viewmodel应该将范围限定到activity生命周期(根据Android文档,这也可以用于其他共享实例)。

如何手动清除viewmodelviewmodelstore或holder片段?

共有1个答案

龙玺
2023-03-14

如果检查这里的代码,您会发现,您可以从viewModelStorefragmentfragmentactivity(例如实现)中获得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();
}

注意:这将清除特定LifeCycleOwner的所有可用ViewModel,这不允许您清除一个特定的ViewModel。

 类似资料:
  • 更新代码库后,我收到一个错误,我似乎无法绕过它。我已经使用了一个我不再使用的包,我通过了正确的步骤来删除这个包,就像这个答案一样,但是我在控制台上做的任何事情都失败了。 我试着跑步: 但我收到这个错误: 我已尝试运行这些命令,但收到相同的错误: 我的问题是,因为这看起来像是只是拿起一个已编译类的缓存版本,有没有办法手动删除已编译的缓存,因为我不能通过命令来处理它?

  • 我在看一些在线课程的播放列表,spring boot的测试项目。简单的积垢。它创建了一些表,但我决定更改一些字段的名称,从连接到mysql的cmd中删除了表。重新启动后,项目不会再次创建此表。我说的对吗,它存储在缓存中的某个地方,即表已经创建的记录?或者,例如,它是否将自动增量id的值存储在缓存中的某个位置?在第二次重新启动之后,spring只是因为一些登录缓存而不检查数据库中表的存在?如何在不从

  • Dokuwiki糊里糊涂地用了一年多,前两天忽然发现整个dokuwiki文件夹大得吓人,居然有130多MB,而我这个wiki站也就不到10个的页面。巡视一圈,冗余文件集中在 data/cache 缓存文件夹中,dokuwiki靠高速缓存提高页面加载速度,不过我的缓存文件实在太多了,居然有80多MB(大概因为时间太久了吧) 那么,开删!cache文件夹是不能删的,里面的1、2、3、a、b、c什么的全

  • 问题内容: 不久,我将一个实体映射为在启用了二级缓存(只读策略)的数据库(Oracle)中查看-ehcache。 如果我手动更新数据库中的某些列,则不会更新缓存。 我没有找到任何方法可以做到这一点。仅当更新将通过Hibernate实体完成时。 我可以以某种方式实现此功能吗? 也许乔布监视表(或视图)?或者也许有某种方法可以通知Hibernate有关具体表中数据库的更改。 感谢您将来的回答! 问题答

  • 问题内容: 默认情况下,扑增加一个发光效果到手机上 我想完全删除此效果或在一个特定的滚动条上删除此效果。我知道我可以在弹跳/钳位之间进行更改。但这实际上并不能消除发光效果。 我能做什么 ? 问题答案: 光晕效果来自GlowingOverscrollIndicator 通过添加ScrollBehavior 要消除这种影响,您需要指定一个custom ScrollBehavior。为此,只需将应用程序