Android Fragment lifecycle

Fragment與View生命週期對照
Android不同版本的生命週期

1. 簡略

調用onAttach,FragmentManager正在管理生命週期,且可使用findFragmentById搜尋

調用onDetach,將不再管理生命週期,且無法使用findFragmentById搜尋

最大Fragment State 由FragmentManager決定,且生命週期狀態永遠不可大於父級

可以使用setMaxLifecycle來控制最大的Fragment State

應避免使用<fragment>,應使用FragmentContainerView在XML內

可以參考Android 新增Lifecycle觀察新增Lifecycle.Event觀察

2. 測試搭配setMaxLifecycle的生命週期

以下手機操作流程皆一樣,打開app -> 按home key -> 返回app

測試使用的Android版本為:Android 11

a. 單純add生命週期

打開 app: onCreate -> onCreateView -> onViewCreated -> onStart -> onResume ->

按home key: onPause -> onStop ->

返回app: onStart -> onResume

popBackStack: onPause -> onStop -> onDestroyView -> onDestroy

b. add + Lifecycle.State.INITIALIZED

打開 app: 沒有生命週期

按home key: 沒有生命週期

返回app: 沒有生命週期

popBackStack: 沒有生命週期

b. add + Lifecycle.State.CREATED

打開 app: onCreate

按home key: 沒有生命週期

返回app: 沒有生命週期

popBackStack: onDestroy

c. add + Lifecycle.State.STARTED

打開 app: onCreate -> onCreateView -> onViewCreated -> onStart

按home key: onStop

返回app: onStart

popBackStack: onStop -> onDestroyView -> onDestroy

d. add + Lifecycle.State.RESUMED

打開 app: onCreate -> onCreateView -> onViewCreated -> onStart -> onResume ->

按home key: onPause -> onStop ->

返回app: onStart -> onResume

popBackStack: onStop -> onDestroyView -> onDestroy

e. add + Lifecycle.State.DESTROYED

app會直接閃退,並拋出以下錯誤訊息

Cannot set maximum Lifecycle to DESTROYED. Use remove() to remove the fragment from the FragmentManager and trigger its destruction.

以上內容參考Android 官網


相關文章

Android Fragment建立、更換、尋找、Back StackAndroid Fragment add與replace分析
1. 使用XML在Activity與Fragment連接
2. 使用程式方式在Activity與Fragment連接
3. 將已新增的Fragment更換
4. 尋找已建立的Fragment
5. Fragment對應的FragmentManager
6. Back Stack使用
Android Fragment 自定義constructorAndroid Fragment show、hide、attach、detach用法
1. 重寫FragmentFactory
2. 建立Fragment
3. 在Activity中使用
1. 範例程式
2. Fragment show與hide是什麼呢?
3. Fragment attach與detach是什麼呢?
Android Fragment Transitions動畫效果Android Fragment shared element transitions動畫效果
1. 範例程式
2. 功能介紹
1. 範例程式
2. 功能介紹
Android Fragment通訊
1. 簡要
2. 使用View Model共享數據
3. 使用 Fragment Result API獲取結果

訂閱Codeilin的旅程,若有最新消息會通知。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

透過 WordPress.com 建置的網站.

向上 ↑

%d 位部落客按了讚: