在 onDestroyView() 中必须将数据绑定对象设置为 null 吗?
Is it mandatory to set databinding obejct to null inside onDestroyView()?
我读了一些文章,其中说最好的做法是在片段中的 onDestroyView()
内将 databinding
对象设置为 null:
override fun onDestroyView() {
super.onDestroyView()
dataBinding = null
}
我也看到了这个 video 甚至没有提到这种做法。我个人不明白这种做法是否有意义。请提供有关此问题的一些信息,因为我真的不知道如何进一步。谢谢
这不是必须的。 databinding
是由编译系统自动生成的。大家可以去看看生成的源码。只需使用 databinding
对象作为公共属性。
没有必要。数据库关闭、网络调用、服务等需要
不是强制性的,但如果您不这样做,可能会导致内存泄漏。
Fragment's lifecycle
不同于 Fragment's view lifecycle
。
考虑以下示例:
onCreate()
onCreateView()
onDestroyView()
onCreateView()
onDestroyView()
onDestroy()
在这种情况下,用户执行了将片段发送到后台堆栈的操作,然后他按下了后退按钮。 onCreateView
已被调用两次,因此有两个 dataBinding
实例,其中第一个实例尚未被垃圾回收。当然在这种情况下差异不会很明显,但是如果你有一个大的堆栈,你需要考虑释放你所有的 View references
inside onDestroyView
.
我读了一些文章,其中说最好的做法是在片段中的 onDestroyView()
内将 databinding
对象设置为 null:
override fun onDestroyView() {
super.onDestroyView()
dataBinding = null
}
我也看到了这个 video 甚至没有提到这种做法。我个人不明白这种做法是否有意义。请提供有关此问题的一些信息,因为我真的不知道如何进一步。谢谢
这不是必须的。 databinding
是由编译系统自动生成的。大家可以去看看生成的源码。只需使用 databinding
对象作为公共属性。
没有必要。数据库关闭、网络调用、服务等需要
不是强制性的,但如果您不这样做,可能会导致内存泄漏。
Fragment's lifecycle
不同于 Fragment's view lifecycle
。
考虑以下示例:
onCreate()
onCreateView()
onDestroyView()
onCreateView()
onDestroyView()
onDestroy()
在这种情况下,用户执行了将片段发送到后台堆栈的操作,然后他按下了后退按钮。 onCreateView
已被调用两次,因此有两个 dataBinding
实例,其中第一个实例尚未被垃圾回收。当然在这种情况下差异不会很明显,但是如果你有一个大的堆栈,你需要考虑释放你所有的 View references
inside onDestroyView
.