Fragment lifecycle
tags: Android
lifecycle
Fragment
doc
fragment lifecycle-callback
小规则,fragment的生命週期,一定会比父层短
create - onAttach
当 fragment 和 activity 关联时呼叫
created - onCreate
将 fragment 添加到 fragmentManager,callback function 传入建构子包含 savedInstanceState,对用户不可见,没有ui
:::info
只有当 fragment 提供了有效的 view 实例,并设置到 fragment且可被 getView 获取,view 的生命週期才会到 initialized
:::
created - onCreateView
执行以拿到 fragment 初始化 ui,可以透过 inflate 或是其他方式建立并回传 view 实例,不应执行耗时操作
created - onActivityCreate
可以和 activity 的 ui 进行互动,在该生命週期之前不行
created - onViewCreate
适合初始化 view 的状态、观察 liveData 或在此设置 recycler 的 adapter, viewPager2
created - onViewStateRestored
为需要从 SaveState 取值,做初始化的类别
started - onStart
强烈建议将继承自 DefaultLifecycleObserver 的类别,在 onStart 做绑定,因为到了 onStart,就保证了 view 是可见的
fragment的生命週期会先到 onStart,view 的才会接着到 onStatrt
:::info
viewPager2预载入仅会到 onStart
:::
resume - onResume
在切换动画完成后,fragment会进入onResume,以跟用户响应
started - onPaused
用户準备离开 fragment,但画面仍可见时,fragment 和 view 会回到 started 阶段,并呼叫 onPaused callback
created - onstoped
已不可见,但这个状态的触发有两种可能
activity, fragment 被停止activity, fragment 状态正要被保存onStop保证了会在 fragment 状态保存前执行
而 onStop也是fragmentTranscation 最后安全执行的地方
created - ondesotryView
转场动画都结束后,生命週期移动到此,fragment 的 view 会和window 分离,所有 view 的生命週期到尽头,getViewLifecycleOwnerLiveData() 会拿到 null,这样才能让所有view都可以被 gc
而要注意的是,此时尚未和 activity 解除连结
created - onDetach
和 activity 分离
destoryed - onDestory
fragment 被从 stack 移除,或是 fragment manager 被销毁,fragment 生命週期也就到尽头
情境
暂时离开萤幕
home, recent application, 锁屏
onAttach -> onCreate -> onCreateView ->onViewCreate -> onStart ->onResume -> onPause ->onStoponStart ->onResume
configuration change
onPause ->onStop ->onDestoryView ->onDestory -> onDetach ->onAttach -> onCreate -> onCreateView ->onViewCreate -> onStart ->onResume
离开应用
onPause ->onStop ->onDestoryView ->onDestory -> onDetach
切换 fragment
onPause ->onStop ->onDestoryView onCreateView ->onViewCreate -> onStart ->onResume