【问题标题】:Is it necessary to set ViewBinding to null in Fragment's onDestroy()?Fragment的onDestroy()中是否需要将ViewBinding设置为null?
【发布时间】:2021-02-09 12:43:03
【问题描述】:

Fragment的onDestroy()中是否需要设置ViewBinding为null?有时我会在教程中看到那个东西。真的有必要吗?

【问题讨论】:

  • 你的意思是onDestroyView? (不是onDestroy
  • 正如the documentation 中提到的:“片段比他们的观点更长寿。确保在片段的 onDestroyView() 方法中清除对绑定类实例的任何引用。”
  • 如果我在 onDestroy 中设置它会怎样?如果我这样做有缺点吗? @迈克尔
  • @Aorstab 内存泄漏。你可以很容易地用谷歌搜索它。

标签: java android kotlin android-fragments


【解决方案1】:

这是必要且非常好的做法,特别是在内存限制很大的 Android 中,您确实需要在使用完资源后清理资源。 ViewBinding 将生成一个自定义的ViewBinding 类,该类将在Fragment 中保留对所有views 的引用,如果未清除ViewBinding 或设置为null,它将不符合GC 的条件,从而保留所有即使您不使用它,内存中的视图也会导致内存泄漏。所以是的,最好在生命周期结束时将其设置为null

【讨论】:

  • 我应该在“super.onDestroyView()”之后还是之前这样做?
  • 没关系,除非你在onDestroyView这样做
  • 虽然这是公认的答案,但我并没有真正相信这个理论,是否有任何证据支持它?我在问这个,因为如果 ViewBinding 类是在片段内创建的,那么它将与片段一样存在,并且将与片段一起被销毁,因为它是片段的一部分。此外,将 var 设置为 null 并不一定保证 GC 会清理它。 var 可以为 null,但仍可访问。
【解决方案2】:

是的,建议在onDestroyView 中将 ViewBinding 设置为 null

ViewBinding 的范围是片段视图的生命周期(在onCreateViewonDestroyView 之间)。 仅在 onCreateView 和 onDestroyView 之间有效。

因此,请在片段的onDestroyView 中将相应的 ViewBinding 设置为 null。

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 2021-11-28
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多