Android概念篇(二)Activity淺解

活動?
繼Context之後,我們接著來看到Activity是什麼
Activity 在App中,可視為一個"頁面"
但Android中,卻偏偏要叫它是一個"活動"
為甚麼呢?
我們可以這麼來看
因為它拿了資源(Context),負責要舉辦活動(Activity)
而舉辦一場活動要做些什麼?

1.分配資源 2.布置場地 3.主持會場 4.安排節目 5.回應觀眾

沒錯,以上可是看作是:

ResourceUIMain ThreadLife CycleEvent

這些的確都是Activity內要負責的
所以也不難理解,為何Android要把每個跳出來的頁面
稱作"活動",因為它不只是提供看而已
它還真的處理了不少雜事。

狀態與生命週期
回歸到實際面
Activity被產生時,便會在系統內被Activity Stack所儲存

一個Activity的生命

共有三段 : EntireVisibleForeground

四個狀態 : ActivitePausedStoppedDead

由七個函數控制 : onCreateonStartonResumeonPause

onRestartonStoponDestory

具體運作流程如下圖


只要override以上七個函數,便能在不同階段
做不同的處理,進入不同狀態。

而當新的Activity一直被產生時,會在Stack中不斷堆疊
要是我們再去呼叫其他App的Activity時
便會被以一個task包住(仍然在stack中)
目的是為了按返回鍵時
還能回到前一個App的Activity,產生無縫接軌的感覺。

如圖(來源):


不同App的activity可以包在一個task內
彷彿只是前後頁的關係而已
不過我們也可以在manifest檔案中,
特別定義Activity的開啟方式:

standard : 每次都重新創造activity

singleTop : 如果activity已經存在,且位於stack的頂端
會把該Intent傳給onNewIntent( )

singleTask : 如果已有activity位於task內,結束位於自己以上的所有activity,使自己處於task的頂端,如果沒有stack,自己新增。

singleInstance:每次都自己創造一個tack,只存自己(不建議使用)

生命週期應用
Activity的四個狀態,決定了被系統回收的先後
而七個方法與三段週期,影響著內部流程的設計:


1. Entire lifetime: onCreate()開始 到 onDestroy()結束

2. Visible lifetime: onStart() 到 onStop()之間

3. Foreground lifetime: onResume() 到 onPause() 之間

長度分別是1 > 2 > 3,彼此一層包著一層

而Foreground可以說是Running狀態,直接呈現到使用者面前

Visible則是要做足準備,Entire 分別用來初始化與做結束

所以歸納如下>>

onCreate: 負責初始化、UI布局、資源讀取
onDestory: 相對用來釋放所有資源

onStart: 表示開始上工,綁定service、register在此處,確保activity跑起來時有得執行
onStop: 相對用來解除綁定,釋放部分資源

onResume
onPause 
是activity迅速回復時要做的,離使用者眼前最近,
所以不要處理業務,執行太久將大幅降低使用者體驗

onRestart 執行特別的修復工作

另外
旋轉screen時,通常會重新執行onCreate動作
但依流程來說還要跑onStart、onResume,
這太耗時了,因此我們可以透過override
 onConfigation( ),來避免重跑流程函數

saveInstance( ) 可以用來記住當前view狀態
所以必須要在onStop前執行,因為一旦Stop後,
view即消失了,也會沒東西可以存...

按下返回鍵會執行onDestory

按下home鍵、電源鍵,僅會執行onStop

 
小結
Activity因為事情很雜,所以有必要分配好流程
生命週期除了扮演流程上的設計階段
也決定著不同狀態,被系統處理掉的先後
因為最貼近使用者體驗
所以每個步驟跟模式都要特別注意