Android應用組件之片段(Fragment)介紹4

1 處理片段生命週期

       管理片段生命週期與管理 Activity 生命週期很相似。和 Activity 一樣,片段也以三種狀態存在:

繼續

片段在運行中的 Activity 中可見。

暫停

另一個 Activity 位於前臺並具有焦點,但此片段所在的 Activity 仍然可見(前臺 Activity 部分透明,或未覆蓋整個屏幕)。

停止

片段不可見。宿主 Activity 已停止,或片段已從 Activity 中移除,但已添加到返回棧。 停止片段仍然處於活動狀態(系統會保留所有狀態和成員信息)。 不過,它對用戶不再可見,如果 Activity 被終止,它也會被終止。

       同樣與 Activity 一樣,假使 Activity 的進程被終止,而您需要在重建 Activity 時恢復片段狀態,您也可以使用 Bundle 保留片段的狀態。您可以在片段的 onSaveInstanceState() 回調期間保存狀態,並可在 onCreate()onCreateView() 或 onActivityCreated() 期間恢復狀態。

       Activity 生命週期與片段生命週期之間的最顯著差異在於它們在其各自返回棧中的存儲方式。 默認情況下,Activity 停止時會被放入由系統管理的 Activity 返回棧(以便用戶通過返回按鈕回退到 Activity)。不過,僅當您在移除片段的事務執行期間通過調用 addToBackStack() 顯式請求保存實例時,系統纔會將片段放入由宿主 Activity 管理的返回棧。

       在其他方面,管理片段生命週期與管理 Activity 生命週期非常相似。 因此,管理 Activity 生命週期的做法同樣適用於片段。 但您還需要了解 Activity 的生命週期對片段生命週期的影響。下圖展示了Fragment與Activity生命週期之間的對應關係:

注意:如需 Fragment 內的某個 Context 對象,可以調用 getActivity()。但要注意,請僅在片段附加到 Activity 時調用 getActivity()。如果片段尚未附加,或在其生命週期結束期間分離,則 getActivity() 將返回 null。

2 與 Activity 生命週期協調一致

       片段所在的 Activity 的生命週期會直接影響片段的生命週期,其表現爲,Activity 的每次生命週期回調都會引發每個片段的類似回調。 例如,當 Activity 收到 onPause() 時,Activity 中的每個片段也會收到 onPause()。不過,片段還有幾個額外的生命週期回調,用於處理與 Activity 的唯一交互,以執行構建和銷燬片段 UI 等操作。 這些額外的回調方法是:

onAttach()

在片段已與 Activity 關聯時調用(Activity 傳遞到此方法內)。

onCreateView()

調用它可創建與片段關聯的視圖層次結構。

onActivityCreated()

在 Activity 的 onCreate() 方法已返回時調用。

onDestroyView()

在移除與片段關聯的視圖層次結構時調用。

onDetach()

在取消片段與 Activity 的關聯時調用。

       上圖說明了受其宿主 Activity 影響的片段生命週期流。在該圖中,您可以看到 Activity 的每個連續狀態如何決定片段可以收到的回調方法。 例如,當 Activity 收到其 onCreate() 回調時,Activity 中的片段只會收到 onActivityCreated() 回調。

       一旦 Activity 達到恢復狀態,您就可以隨意向 Activity 添加片段和移除其中的片段。 因此,只有當 Activity 處於恢復狀態時,片段的生命週期才能獨立變化。

       不過,當 Activity 離開恢復狀態時,片段會在 Activity 的推動下再次經歷其生命週期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章