Android Activity生命週期簡介

来源:互联网 发布:局域网批量安装软件 编辑:程序博客网 时间:2024/05/22 02:28

作为最基础的知识点,还是写下来比较好。在网上看到一片不错的,转载了过来。

前面有提到何謂Activity: 最簡單的就是把Activity看成一個User Interface Program. 它會提供使用者一個互動式的介面功能. 當然一個activity通常不只一個UI, 所有的Activity在系統裏由Activity stack 所管理, 當一個新的Activity被執行後,它將會被放置到stack的最頂端,並且變成"running activity", 而之前的Activity原則上還是存在stack中,但不會是在foreground(前景)的情況.

一個Activity基本上有四個狀態 Active, Paused, Stopped, Dead:

Active (活動):
Active狀態是使用者啟動Application 或 Activity 後,Activity 在運行中的狀態.
在 Android 平台上, 一個時刻只會有一個 Activity 處於Active 或 Running 狀態。其他的 Activity 都處於未Dead, Stopped 或是Paused 的狀態.

Paused (暫停)
Paused狀態是當 Activity 暫時暗下來, 退到背景畫面的狀態. 例如當電話來時, 原本運行的 Activity 退到背景畫面. 新出現的介面元件蓋住了原來的 Activity 畫面.
Activity 處在Paused狀態時, 使用者無法與原來的 Activity 互動.

Stopped (停止)
Stopped狀態是有其他 Activity 正在執行, 而這個 Activity 已經離開螢幕, 不再動作的狀態.
透過長按Home鍵, 可以叫出所有處於Stopped狀態的Application List(應用程式列表).
在Stopped狀態的 Activity,還可以透過 Notification 來喚醒。以後再說明 Notification.

Dead/Inactive (已回收或未啟動)
Dead狀態是 Activity 尚未被啟動, 已經被手動終止, 或已經被系統回收的狀態.
要手動終止 Activity, 可以在程式中呼叫 finish 函式.
如果是被系統回收, 可能是因為記憶體不足, 系統根據記憶體不足時的回收規則, 將處於Stopped狀態的 Activity 所佔用的記憶體回收.


下面的流程圖說明一個Activity運行的情況, 長方形代表callback methods(回呼函式), 可以做出想要處理的事情, 有顏色的部份就是實際Activity會處於的狀態.



上圖有三個主要 lifetime :

1. Entire lifetime: 一個Activity的Entire lifetime是由onCreate()開始, 一直到onDestroy()結束.
一個Activity可以把所有的資源設定寫在onCreate中, 一直到onDestroy()時再釋放出來.

2. Visible lifetime: 一個Activity的Visible lifetime是指在onStart()到onStop()之間.
在這段時間內,使用者可以在螢幕上看見Activity, 要注意這個"Visible"是個形容, Activity不見得一定在foreground(前景)跟使用者直接互動.

3. Foreground lifetime: 一個Foreground lifetime 指 onResume() 到 onPause() 之間. 這個時期的Activity是在其他的Activity的前面, 且可以直接跟使用者進行互動. 所以這段時期指的就是圖中的Activity is running.


簡單的總結幾個動作:
onCreate()用來做程式的初使化動作;
onDestory()通常都拿來把onCreate()時的資料做釋放的動作;
onPause()時把需要保存的資料保存;
onResume()把保存的資料拿回來使用.

再歸納一般 Android Application遵循的動作流程:

一般啟動:
onCreate -> onStart -> onResume
啟動一個 Activity 的基本流程是: 分配資源給這個 Activity(onCreate), 然後將 Activity 內容顯示到螢幕上(onStart), 在一切就緒後, 取得螢幕的控制權(onResume), 使用者可以開始使用這個程式。

呼叫另一個 Activity:
onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)
先凍結原本的 Activity, 再交出直接存取螢幕能力(onPause )的過程. 直到 Activity 2 完成一般啟動流程後, Activity 1 才會被停止.

回復原 Activity
onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2)
按 Back鍵可以回到原本的 Activity。

退出/結束
onPause -> onStop -> onDestroy
如果程式中有直接呼叫 finish 函式來關閉 Activity的話, 系統會暫停(Pause), 停止(Stop)然後銷毀(Destroy)。

回收後再啟動
onCreate -> onStart -> onResume
被回收掉的 Activity 一旦又重新被呼叫時,會像一般啟動一樣再次呼叫 Activity 的 onCreate 函式.

代码

原创粉丝点击