Android 查看绑定 - 在片段生命周期中清除绑定
Android View Binding - Clear Binding in Fragment Lifecycle
为什么在 Fragment 中实现 Android View Binding 时清除 onDestroyView
中的 binding
很重要?
如文档所示,Use view binding in fragments, and the Android Architecture Components sample,binding
在 onCreateView
中启动,并在 onDestroyView
中清除。
与在 onDestroyView
中启动 binding
而不清除它相比,实施它有什么好处?没有显式清除实例变量binding
,应该在Fragment销毁时清除。
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
当 Fragment 实例本身仍在内存中时,Fragment 可能会多次创建和销毁其视图。如果您不清空视图引用,那么您将在 onDestroyView()
和 onCreateView()
之间的时间跨度内“泄漏”这些视图。不过它们不会永久泄露,所以这可能是错误的术语。
There are some who say这些观点暂时泄露也无所谓。我不知道生命周期的细节足以知道它是否严格重要。我希望有时视图被拆除的原因是 Android 试图在它们离开屏幕时节省内存,所以如果你坚持它们,你就是在颠覆它。
为什么在 Fragment 中实现 Android View Binding 时清除 onDestroyView
中的 binding
很重要?
如文档所示,Use view binding in fragments, and the Android Architecture Components sample,binding
在 onCreateView
中启动,并在 onDestroyView
中清除。
与在 onDestroyView
中启动 binding
而不清除它相比,实施它有什么好处?没有显式清除实例变量binding
,应该在Fragment销毁时清除。
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
当 Fragment 实例本身仍在内存中时,Fragment 可能会多次创建和销毁其视图。如果您不清空视图引用,那么您将在 onDestroyView()
和 onCreateView()
之间的时间跨度内“泄漏”这些视图。不过它们不会永久泄露,所以这可能是错误的术语。
There are some who say这些观点暂时泄露也无所谓。我不知道生命周期的细节足以知道它是否严格重要。我希望有时视图被拆除的原因是 Android 试图在它们离开屏幕时节省内存,所以如果你坚持它们,你就是在颠覆它。