LiveData最重要的一个特性是具有生命周期感知能力,当Activity或者Fragment处于活跃状态时,观察者才能观察到LiveData的变化。

如果这一点没理解好就容易犯难以察觉的错误。无论是LiveData还是观察者都要绑定一个生命周期拥有者,简单来说就是你的LiveData或者观察者要绑定一个Avtivity或者Fragment 。

注意一点,当你的观察者是在Fragment时,千万不要让你的观察者绑定Activity,不然可能会造成内存泄露,要把你的观察者绑定在Fragment的生命周期上。

例如下面的liveData是在一个fragment中,第一种是正确的写法,第二种写法不会报错,但是会出现内存泄露的问题。

第一种写法:

//这是正确的
liveData.observe(getViewLifecycleOwner(), observer);

第二种写法:

//这是错误的,可能造成内存泄露
liveData.observe(requireActivity(),observer);
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐