[譯] Android 生命週期備忘錄 — 第三部分:Fragments

掘金翻譯計劃發表於2019-04-02

本系列文章:
第一部分:Activities — 單一 activity 的生命週期
第二部分:多個 activities — 跳轉和返回棧(back stack)
第三部分: Fragments — Activity 和 Fragment 的生命週期(即本文) 第四部分:ViewModels、透明 Activities 及啟動模式

為了更方便地查詢,你可以去查閱 PDF 版本的圖表備忘錄

本節中我們將介紹依附在 Activity 上的 Fragment 的行為。不過別把這種情況和加入到返回棧的 Fragment 搞混了(請參看 Tasks and Back Stack 這篇文章來學習有關 Fragment 事務和返回棧的知識)。

場景 1:當帶有 Fragment 的 Activity 啟動和終止時

[譯] Android 生命週期備忘錄 — 第三部分:Fragments

場景 1:當帶有 Fragment 的 Activity 啟動和終止時

雖然 Activity 的 onCreate 方法保證在 Fragment 的 onCreate 方法之前被呼叫,但是其它像 onStartonResume 這樣的回撥會被並行執行,因此它們會被以任意順序呼叫。例如,系統可能先呼叫 Activity 的 onStart 方法再呼叫 Fragment 的 onStart,但在此之後卻先呼叫 FragmentonResume 方法再執行 Activity 的 onResume

小心管理它們執行的順序和時間,以避免兩者競爭帶來的問題。

場景 2:當帶有 Fragment 的 Activity 被旋轉時

[譯] Android 生命週期備忘錄 — 第三部分:Fragments

場景 2:當帶有 Fragment 的 Activity 被旋轉時

狀態管理

Fragment 狀態的儲存和恢復與 Activity 狀態非常相似,區別在於 Fragment 中沒有 onRestoreInstanceState 方法,但是 Fragment 的 onCreateonCreateViewonActivityCreated 方法中的 Bundle 物件是可被獲取的。

Fragment 是可以被保留的,這意味著當配置被改變時可以使用同一個 Fragment 例項。正如接下來的場景中所描述的,被複用的 Fragment 與普通 Fragment 有些許不同。


場景 3:當帶有可被複用的 Fragment 的 Activity 被旋轉時

[譯] Android 生命週期備忘錄 — 第三部分:Fragments

場景 3:當帶有可被複用的 Fragment 的 Activity 被旋轉時

Fragment 物件既沒有被建立也沒有被銷燬,因為在 Activity 被重新建立後,同一個 Fragment 例項被複用了。因此在 onActivityCreated 過程中 Bundle 仍然是可被獲取的。

使用可被複用的 Fragment 是不被推薦的,除非你想在配置改變時使用非 UI 的 Fragment 來儲存資料。它的功能和內部元件庫中的 ViewModel 相同,但 ViewModel 具有更簡潔的 API。

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章