- 原文地址:The Android Lifecycle cheat sheet — part III : Fragments
- 原文作者:Jose Alcérreca
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:Qiuk17
- 校對者:xiaxiayang, DevMcryYu
本系列文章:
第一部分:Activities — 單一 activity 的生命週期
第二部分:多個 activities — 跳轉和返回棧(back stack)
第三部分: Fragments — Activity 和 Fragment 的生命週期(即本文)
第四部分:ViewModels、透明 Activities 及啟動模式
為了更方便地查詢,你可以去查閱 PDF 版本的圖表備忘錄。
本節中我們將介紹依附在 Activity 上的 Fragment 的行為。不過別把這種情況和加入到返回棧的 Fragment 搞混了(請參看 Tasks and Back Stack 這篇文章來學習有關 Fragment 事務和返回棧的知識)。
場景 1:當帶有 Fragment 的 Activity 啟動和終止時
場景 1:當帶有 Fragment 的 Activity 啟動和終止時
雖然 Activity 的 onCreate
方法保證在 Fragment 的 onCreate
方法之前被呼叫,但是其它像 onStart
和 onResume
這樣的回撥會被並行執行,因此它們會被以任意順序呼叫。例如,系統可能先呼叫 Activity 的 onStart
方法再呼叫 Fragment 的 onStart
,但在此之後卻先呼叫 Fragment 的 onResume
方法再執行 Activity 的 onResume
。
小心管理它們執行的順序和時間,以避免兩者競爭帶來的問題。
場景 2:當帶有 Fragment 的 Activity 被旋轉時
場景 2:當帶有 Fragment 的 Activity 被旋轉時
狀態管理
Fragment 狀態的儲存和恢復與 Activity 狀態非常相似,區別在於 Fragment 中沒有 onRestoreInstanceState
方法,但是 Fragment 的 onCreate
、onCreateView
和 onActivityCreated
方法中的 Bundle 物件是可被獲取的。
Fragment 是可以被保留的,這意味著當配置被改變時可以使用同一個 Fragment 例項。正如接下來的場景中所描述的,被複用的 Fragment 與普通 Fragment 有些許不同。
場景 3:當帶有可被複用的 Fragment 的 Activity 被旋轉時
場景 3:當帶有可被複用的 Fragment 的 Activity 被旋轉時
Fragment 物件既沒有被建立也沒有被銷燬,因為在 Activity 被重新建立後,同一個 Fragment 例項被複用了。因此在 onActivityCreated
過程中 Bundle 仍然是可被獲取的。
使用可被複用的 Fragment 是不被推薦的,除非你想在配置改變時使用非 UI 的 Fragment 來儲存資料。它的功能和內部元件庫中的 ViewModel 相同,但 ViewModel 具有更簡潔的 API。
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。