Android开发Android技术知识Android开发

Fragment生命周期 - 图文、详细、白话解析

2023-08-24  本文已影响0人  zhongjh

之前在Fragment中使用model.observe(getViewLifecycleOwner())这段代码,突然对这段getViewLifecycleOwner() 代码的生命周期感到好奇,因为Activity是使用自身的生命周期,而Fragment也是可以使用自身生命周期的,但是如果Fragment使用model.observe(this),就会报以下警告:


警告

这个警告的意思是我们需要使用getViewLifecycleOwner()。
getViewLifecycleOwner()这个意思是view的生命周期,也就是说,在Fragment中,this跟getViewLifecycleOwner()的分别区别如下:

this - Fragment的自身生命周期
getViewLifecycleOwner() - Fragment中的view的生命周期

那么为什么要使用getViewLifecycleOwner()呢?

我们先复习下Fragment的生命周期

打开Fragment:

onAttach
onCreate
onCreateView
onActivityCreated
onStart
onResume

点击Home键,Fragment进入暂停生命周期

onPause
onStop

然后重新打开该App恢复该Fragment

onStart
onResume

那我们点击Back退出该Fragment的生命周期

onPause
onStop
onDestroyView
onDestroy
onDetach

上面四种生命周期是比较常见场景,那么从一个Fragment打开到销毁,会经历以下生命周期

onAttach
onCreate
onCreateView
onActivityCreated
onStart
onResume
onPause
onStop
onDestroyView
onDestroy
onDetach

我们主要看重点这四个

onCreate
onCreateView
onDestroyView
onDestroy

两者区别简而言之:

那么为什么要使用getViewLifecycleOwner()呢?

如果使用this,当使用viewModel获得数据时,此时如果onDestroyView()被调用已经销毁掉了View,但 onDestroy()未被调用,则会将继续观察 LiveData,然后填充数据到不存在的 RecyclerView 时会崩溃。但是如果改成使用 viewLifecycleOwner,则可以避免问题

上一篇下一篇

猜你喜欢

热点阅读