iT邦幫忙

0

Android 生命週期 - Fragment

  • 分享至 

  • xImage
  •  

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

已不可見,但這個狀態的觸發有兩種可能

  1. activity, fragment 被停止
  2. 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 ->onStop

onStart ->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 

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言