问题描述
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 (将#修改为@)