本系列文章:
- 第一部分:Activity — 單一 activity 的生命週期
- 第二部分:多個 Activity — 跳轉和返回棧(back stack)
- 第三部分:Fragment — activity 和 fragment 的生命週期
- 第四部分:ViewModel、半透明 Activity 及啟動模式 (即本文)
為了更方便地查詢,你可以去查閱 PDF 版本的圖表備忘錄。
ViewModel
ViewModel
的生命週期非常簡單:它只有 onCleared
這一個回撥。但是,這個函式的作用域在 activity 和 fragment 中是有區別的:
ViewModel 作用域
注意,初始化是在獲取 ViewModel
時進行的,通常在 onCreate
方法中完成。
半透明 Activity
半透明的 activity 有半透明(通常是透明的)的背景,所以使用者仍然可以看到該 activity 下面是什麼。
當一個 activity 的主題設定了 android:windowIsTranslucent
屬性時,生命週期稍有變化:背景後面的 activity 不會被停止,只會被暫停,所以可以繼續接收 UI 的更新:
常規 activity 和半透明 activity 之間的比較
此外,當返回到一個任務時,這兩個 activity 都會被恢復,重走 onRestart
和 onStart
方法,但只有半透明的 activity 重走 onResume
方法:
按下 home 鍵,回到帶有半透明 activity 的應用程式
啟動模式
處理任務和回退棧的推薦方法主要是:別處理 — 你應該採用預設行為。要了解更多細節,請閱讀 Ian Lake 的關於這個主題的文章:任務和回退棧。
如果你真的需要使用 SINGLE_TOP
,下圖展現了它的行為模式:
Single Top 行為模式
方便比較,下面是 singleTask
模式看起來的樣子(但是你可能不應該用到它):
Single Task
注意:如果你用了 Jetpack 中 導航架構元件(Navigation Architecture Component),你會從它支援 Single Top 和自動合成回退棧中受益。
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。