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