[譯] Android 生命週期備忘錄 — 第一部分:單一 Activities

Android 系統的目的是讓用戶加強控制權而且讓他們簡便地使用應用程序。例如,一個 app 的用戶可能會旋轉屏幕,回覆一條通知信息,或者切換到另外一個任務,而用戶應該可以在這類操做後繼續流暢地使用這個 app。html

爲了提供這種用戶體驗,你應該知道怎麼管理組件的生命週期。組件能夠是一個 Activity,一個 Fragment,一個 Service,或者 Application 自己,甚至是在默默運行的進程。組件有生命週期,生命週期會在多種狀態中變換。當狀態發生變化時,系統會經過一個生命週期回調方法通知你。前端

爲了更好解釋生命週期是怎麼運做的,咱們定義了根據現有組件進行分類的一系列用戶場景。android

第一部分: Activities — 單一 activity 的生命週期 (就是本文)ios

第二部分: 多個 activities — 跳轉和返回棧(back stack)git

第三部分: Fragments — activity 和 fragment 的生命週期github

它們的圖表也提供了 PDF格式備忘錄,以方便查閱。後端


除非特別說明,接下來的這些場景展現了這些組件的默認行爲。app

若是你發現有錯誤或者遺漏了什麼重要的東西,請在下方評論。ide

第一部分: Activities

單一 Activity — 場景 1:應用被結束而且重啓

觸發緣由:post

  • 用戶按下了 返回鍵,或者是
  • Activity.finish() 方法被調用

這個最簡單的場景說明了一個單一 activity 的應用被用戶開啓,結束,和重啓時發生了什麼:

場景 1:應用被終止而且重啓

狀態處理

  • onSaveInstanceState 不會被調用 (由於 activity 被結束了,你不須要保存狀態)
  • onCreate 沒有 Bundle 對象,若是從新打開應用的話。由於先前的 activity 結束了,也不須要恢復狀態。

單一 Activity — 場景 2:用戶切換出去

觸發緣由:

  • 用戶按了 Home 鍵
  • 用戶切換到另外一個應用(點擊虛擬按鍵(Overview menu),點擊一個通知,接聽來電,等等)

場景 2:用戶切換出去

在這個場景中系統會 stop 這個 activity,但不會立刻結束它。

狀態處理

當你的 activity 進入 Stopped 狀態,系統會使用 onSaveInstanceState 去保存應用的狀態以防系統一段時間後終止這個應用的進程 (請看下面)

假設應用的進程沒有被終止,這個應用的實例會常駐在內存,保存全部狀態。當這個 activity 回到前臺工做時,它會恢復這些狀態。你不須要從新初始化這些以前已生成的組件。


單一 Activity — 場景 3:配置發生變化

觸發緣由:

  • 配置發生變化,例如屏幕旋轉
  • 在多窗口模式下,用戶調整窗口大小

場景 3:屏幕旋轉或其餘配置變化

狀態處理

像屏幕旋轉或窗口大小改變,這種配置變化應該可以讓用戶在變化後繼續無縫使用。

  • activity 會被徹底 destroy,可是 activity 的狀態會被保存下來並在下一個實例中恢復
  • onCreateonRestoreInstanceState 中的 Bundle 對象是相同的。

單一 Activity — 場景 4:應用被系統暫停

觸發緣由:

  • 開啓多窗口模式 (API 24+)而且應用失去焦點
  • 另外一個應用部分地覆蓋在正在運行的應用上面(例如一個購買對話框,一個運行時權限確認對話框,一個第三方登錄對話框...)
  • 調用意圖選擇器,例如調用了分享對話框

場景 4:應用被系統暫停

這個場景不適用於如下狀況:

  • 對話框屬於同一個應用。彈出一個警告對話框或者一個 DialogFragment 並不會暫停(執行 onPause 方法)被遮擋住的 activity。
  • 通知。用戶收到一個新通知或者拉下通知欄不會暫停被遮擋住的 activity。

延伸閱讀


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

相關文章
相關標籤/搜索