片段中的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
}

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

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

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

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

  • 关于NullPointerException

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...