iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
2
Software Development

[Andriod] Andriod Studio 從入門到進入狀況系列 第 27

[Day 26] Android程式設計番外篇 - 活動的生命週期(一)

今天要來介紹活動(Activity)的生命週期,

為什麼要瞭解生命週期?

  • Android應用程式的生命週期是由Android框架進行管理,而不是由應用程式直接控制。
  • 通常,每一個應用程式(入口通常是一個Activity的OnCreate方法)都會佔據一個行程(Process),當系統記憶體即將不足的時候,會依照優先級自動進行行程(Process)的回收,不管是使用者或是開發者,都無法確定應用程式何時會被回收。
  • 當從一個Activity切換到另一個Activity的時候,原本的Activity將經過一連串的狀態改變,開發者可以在程式中添加一些各狀態相應的流程,每次Activity改變狀態時,就會執行相對應的流程。
  • 要讓使用者有好的使用經驗,Activity需要在各個週期點上負責保管狀態、恢復狀態、傳送資料等工作。

Activity的狀態

Android的虛擬機(VM)是使用堆疊(Stack based)管理,主要有四種狀態

Active(活動)

  • Active狀態是使用者啟動應用程式或Activity後,Activity運行中的狀態
  • 在Android平臺上,同一個時刻只會有一個Activity處於活動(Active)或運行(Running)狀態。其他的Activity都處於未啟動(Dead)、停止(Stopped)、或是暫停(Pause)的狀態。

Paused(暫停)

  • Pause狀態是目前運行的螢幕畫面暫時暗下來,退到背景畫面的狀態
  • 當我們使用Toast、Alerting或是電話來了時,都會讓原本運行的Activity退到背景畫面。新出現的Toast、AlertDialog等介面元件蓋住了原來的Activity畫面。Activity處在Paused狀態時,使用者無法與原Activity互動。

Stopped(停止)

  • Stopped狀態是當有其他Activity正在執行,而這個Activity已經交出螢幕控制權,處於不再動作的狀態
  • 透過長按Home鈕,可以叫出所有處於Stopped狀態的應用程式列表,點選後即再次啟動該應用程式

Dead(已回收或未啟動)

  • Dead狀態是Activity尚未被啟動、已經被手動停止,或已經被系統回收的狀態。
  • 要手動終止Activity,可以在程式中呼叫finish函式。如果是被系統回收,可能是因為記憶體不足了,所以系統根據

記憶體不足時的回收規則,將處於Stopped狀態的Activity所佔用的記憶體回收。

系統記憶體不足時的行為:
當Android系統的記憶體不足時,會根據以下的記憶體回收規則來回收記憶體:

  • 先回收與其他Activity或Service/Intent Receiver無關的行程(即優先回收獨立的Activity)
  • 再回收處於Stopped狀態的其他類型Activity(在背景等待的Activity)。最久沒有使用的Acitvity優先回收(官方說法是「根據LRU演算法...」)
  • 還不夠?回收service行程
  • 快不行啦!關掉可見的Activity/行程
  • 關閉當前的Activity
    當系統缺記憶體缺到開始砍 可見的Activity/行程 時,表示早就應該要換手機了。

上一篇
[Day 25] 我的第一個Android程式 - BMI程式設計(十六) 換頁的動作(二)
下一篇
[Day 27] Android程式設計番外篇 - 活動的生命週期(二)
系列文
[Andriod] Andriod Studio 從入門到進入狀況33

尚未有邦友留言

立即登入留言