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

Android_開發者發表於2019-03-02

Android 系統的目的是讓使用者增強控制權並且讓他們簡便地使用應用程式。例如,一個 app 的使用者可能會旋轉螢幕,回覆一條通知資訊,或者切換到另一個任務,而使用者應該能夠在這類操作後繼續流暢地使用這個 app。

為了提供這種使用者體驗,你應該知道怎麼管理元件的生命週期。元件可以是一個 Activity,一個 Fragment,一個 Service,或者 Application 本身,甚至是在默默執行的程式。元件有生命週期,生命週期會在多種狀態中變換。當狀態發生變化時,系統會通過一個生命週期回撥方法通知你。

為了更好解釋生命週期是怎麼運作的,我們定義了根據現有元件進行分類的一系列使用者場景。

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

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

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

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


除非特別說明,接下來的這些場景展示了這些元件的預設行為。

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

第一部分: Activities

單一 Activity — 場景 1:應用被結束並且重啟

觸發原因:

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

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

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

場景 1:應用被終止並且重啟

狀態處理

  • onSaveInstanceState 不會被呼叫 (因為 activity 被結束了,你不需要儲存狀態)
  • onCreate 沒有 Bundle 物件,如果重新開啟應用的話。因為先前的 activity 結束了,也不需要恢復狀態。

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

觸發原因:

  • 使用者按了 Home 鍵
  • 使用者切換到另一個應用(點選虛擬按鍵(Overview menu),點選一個通知,接聽來電,等等)
[譯]Android 生命週期備忘錄 — 第一部分:單一 Activities

場景 2:使用者切換出去

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

狀態處理

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

假設應用的程式沒有被終止,這個應用的例項會常駐在記憶體,儲存所有狀態。當這個 activity 回到前臺工作時,它會恢復這些狀態。你不需要重新初始化這些之前已生成的元件。


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

觸發原因:

  • 配置發生變化,例如螢幕旋轉
  • 在多視窗模式下,使用者調整視窗大小
[譯]Android 生命週期備忘錄 — 第一部分:單一 Activities

場景 3:螢幕旋轉或其他配置變化

狀態處理

像螢幕旋轉或視窗大小改變,這種配置變化應該能夠讓使用者在變化後繼續無縫使用。

  • activity 會被完全 destroy,但是 activity 的狀態會被儲存下來並在下一個例項中恢復
  • onCreateonRestoreInstanceState 中的 Bundle 物件是相同的。

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

觸發原因:

  • 開啟多視窗模式 (API 24+)並且應用失去焦點
  • 另一個應用部分地覆蓋在正在執行的應用上面(例如一個購買對話方塊,一個執行時許可權確認對話方塊,一個第三方登陸對話方塊…)
  • 呼叫意圖選擇器,例如呼叫了分享對話方塊
[譯]Android 生命週期備忘錄 — 第一部分:單一 Activities

場景 4:應用被系統暫停

這個場景不適用於以下情況:

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

延伸閱讀


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

相關文章