如何解决片段中的ViewBinding-可能发生内存泄漏甚至NullPointerException?
official documentation显示了一个代码示例,其中在null
中将绑定属性设置为onDestroyView()
。
对我来说,显而易见的原因是其视图已被破坏但尚未被破坏的片段可以释放其视图的内存。如果片段仍然具有对绑定的引用,则该内存将泄漏,而绑定本身保留对视图的引用。
我的问题是,是否存在缺少将绑定属性设置为null
的情况而导致NullPointerException
的情况?
在问了这个一般性问题之后,我想根据这个具体的代码示例提出相同的问题,首先避免使用binding
属性:
class SampleFragment : Fragment()
{
private val viewModel by sharedViewModel<SampleViewModel>()
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View =
FragmentSampleBinding.inflate(inflater,container,false).apply {
sampleTextView.text = "foo"
viewModel.sampleLiveData.observe(viewLifecycleOwner,Observer { sampleText ->
sampleTextView.text = sampleText
})
}.root
}
我没有财产。绑定范围仅限于
-
onCreateView()
- 实时数据观察者的回调
虽然1.似乎并不重要。我想知道2.是否安全。
-
关于内存泄漏-我认为实时数据观察范围也通过
viewLifecycleObserver
绑定到视图生命周期。因此,如果发生内存泄漏,它不会持续很长时间。 -
关于
NullPointerException
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。