美文网首页Android开发Android技术知识Android开发
Fragment生命周期 - 图文、详细、白话解析

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

作者: zhongjh | 来源:发表于2023-08-24 16:42 被阅读0次

    之前在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()绑定fragment 的onCreateView()到 onDestroyView()这个范围的生命周期

    • this 绑定 fragment 的整个生命周期onCreate()到onDestroy()这个范围的生命周期,生命周期范围会更长

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

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

    相关文章

      网友评论

        本文标题:Fragment生命周期 - 图文、详细、白话解析

        本文链接:https://www.haomeiwen.com/subject/cymmmdtx.html