关于安卓LiveData的一点可能造成内存泄露的细节问题
LiveData最重要的一个特性是具有生命周期感知能力,当Activity或者Fragment处于活跃状态时,观察者才能观察到LiveData的变化。如果这一点没理解好就容易犯难以察觉的错误。无论是LiveData还是观察者都要绑定一个生命周期拥有者,简单来说就是你的LiveData或者观察者要绑定一个Avtivity或者Fragment 。注意一点,当你的观察者是在Fragment时,千万不要让
·
LiveData最重要的一个特性是具有生命周期感知能力,当Activity或者Fragment处于活跃状态时,观察者才能观察到LiveData的变化。
如果这一点没理解好就容易犯难以察觉的错误。无论是LiveData还是观察者都要绑定一个生命周期拥有者,简单来说就是你的LiveData或者观察者要绑定一个Avtivity或者Fragment 。
注意一点,当你的观察者是在Fragment时,千万不要让你的观察者绑定Activity,不然可能会造成内存泄露,要把你的观察者绑定在Fragment的生命周期上。
例如下面的liveData是在一个fragment中,第一种是正确的写法,第二种写法不会报错,但是会出现内存泄露的问题。
第一种写法:
//这是正确的
liveData.observe(getViewLifecycleOwner(), observer);
第二种写法:
//这是错误的,可能造成内存泄露
liveData.observe(requireActivity(),observer);
更多推荐
已为社区贡献4条内容
所有评论(0)