

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 Stack | Android Fragment add與replace分析 |
1. 使用XML在Activity與Fragment連接 2. 使用程式方式在Activity與Fragment連接 3. 將已新增的Fragment更換 4. 尋找已建立的Fragment 5. Fragment對應的FragmentManager 6. Back Stack使用 | |
Android Fragment 自定義constructor | Android 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獲取結果 |