我正在尝试在 Fragments 中使用 ViewBinding。
首先,谷歌说如下:
注意:片段比它们的视图更长寿。确保在片段的 onDestroyView() 方法中清除对绑定类实例的任何引用。[在片段中使用视图绑定]
所以,我写了如下代码:
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
Run Code Online (Sandbox Code Playgroud)
然后,在 onDestoryView() 之后,我开始关注 NPE。
安全吗?假设您在 onDestoryView() 和 onDetact() 之间的某个时间点收到网络响应
片段比他们的观点更持久
让我们解释一下,假设您有 Fragment A 和 B(BackStack 中的 A 和 B)相同的容器视图和相同的 FragmentManager。当你用 B 替换 Fragment A 时BackStack。A 的所有视图元素都将被销毁,但 Fragment A 的实例仍然存在于 fragment 中。这意味着如果您保留_binding它的值可能会泄漏,因为它仍然保留视图引用但 Android 系统想要清除它。所以谷歌建议你分配 null_binding来释放视图引用。
假设您在 onDestoryView() 和 onDetact() 之间的某个时间点收到网络响应
如果 onDestroyView 更新您的 UI,您不应该在 onDestroyView 之后处理任何网络响应,因为您的片段视图不呈现给用户。
| 归档时间: |
|
| 查看次数: |
1072 次 |
| 最近记录: |