2

官方文档显示了一个代码示例,其中绑定属性设置为nullin 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
}

我没有持有财产。绑定的范围仅限于

  1. onCreateView()
  2. 实时数据观察者的回调

虽然 1. 似乎并不重要。我想知道 2. 是否安全。

  • 关于内存泄漏 - 我认为实时数据观察范围也通过viewLifecycleObserver. 因此,如果发生内存泄漏,它不会持续很长时间。

  • 关于一个NullPointerException

4

0 回答 0