概述
Fragment的主要功能就是創建一個View,並且有一個生命週期來管理這個View。
Fragment的生命週期和Activity的生命週期類似,都有一些回調方法。
各個生命週期
左側是Activity的生命週期,右側對應這個狀態下執行Fragment的生命週期方法。
Fragment有的生命週期與Activity生命週期名字都是一樣的,對應的功能也類似。
只不過在Created狀態和Destroy狀態多了一些方法。
onAttach()
當Fragment和它所在的Activity關聯起來的時候調用。
onCreateView()
當需要創建一個與Fragment關聯的View的時候會調用,這個方法會返回一個View。
inflate的三個參數含義:
onDestroyView()
當與Fragment關聯的那個View與Fragment解除的關聯,從View樹中移除的時候調用。下次Fragment需要顯示一個View的時候會重現調用onCreateView。
onDetach()
當Fragment與之前onAttach()關聯的那個Activity解除關係的時候調用。
和Activity類似,Fragment可以停留的三個狀態:
Resumed
Fragment的運行狀態,此時的Fragment處於運行狀態,可以用戶進行交互。類似Activity的Resumed
Paused
有其他的Activity獲取焦點,前臺運行,Fragment所在的Activity失去焦點,部分顯示在前臺Activity下面。
Stopped
Fragment不在可見。此時的Fragment所在的Activity可能已經stopped了,或者fragment從Activity中移除到Fragment的退回棧中。
一個stopped狀態的Fragment沒有銷燬,還在存活狀態,他的狀態被系統保存,只是不可見、不可交互,此時很可能被系統回收。
可以利用Bundle來記錄Fragment的狀態,當Activity被銷燬需要記錄Fragment狀態,並且在Activity重新創建的時候恢復Fragment的狀態。可以保存Fragment的狀態在Fragment的nSaveInstanceState()回調方法中,在onCteat()、onCreatView()或者onActivityCreated()方法中進行恢復。
在生命週期中Activity與Fragment的最大不同之處是回退棧是相互獨立的,Activity的回退棧是系統來管理的,Fragment的回退棧是被宿主Activity來管理的,也就是說我們可以自己來進行控制(調用addToBackStack()).
Fragment生命週期也沒有啥多說的哈哈,導致這篇文章很短。😁