fragment中使用LiveData时,需要传入一个owner参数,若传入fragment的this,会直接报错,但是查看源码可知,fragment是实现了LifecycleOwner接口。但是为什么编译器爆红呢?经过查询相关资料得知

以上为谷歌官方的说明,搞了半天是谷歌不让用了,推荐使用getViewLifecycleOwner()来获取LifecycleOwner,点进去看源码注释

翻译一下就是,可以获取一个与fragment视图生命周期相关的lifecycle,大多数情况下,这个lifecycler反映了fragment的生命周期,但是某些情况下fragment的生命周期比view本身的生命周期长很多。
我们使用LiveData的一个原因是,livedata可以感知到生命周期变化,那这就显而易见了,fragment本身实现的LifecycleOwner是与自己的生命周期相关的,但是view的生命周期实际是比fragment的短的。正常情况下,我们从livedata中拿到数据实际就是为了更新显示到view上,所以应该感知view的生命周期。(浅学一下,若有误,希望老铁们指正)
网友评论