繼Context之後,我們接著來看到Activity是什麼
Activity 在App中,可視為一個"頁面"
但Android中,卻偏偏要叫它是一個"活動"
為甚麼呢?
我們可以這麼來看
因為它拿了資源(Context),負責要舉辦活動(Activity)
而舉辦一場活動要做些什麼?
1.分配資源 2.布置場地 3.主持會場 4.安排節目 5.回應觀眾
沒錯,以上可是看作是:
Resource、UI、Main Thread、Life Cycle、Event
這些的確都是Activity內要負責的
所以也不難理解,為何Android要把每個跳出來的頁面
稱作"活動",因為它不只是提供看而已
它還真的處理了不少雜事。
狀態與生命週期
回歸到實際面
Activity被產生時,便會在系統內被Activity Stack所儲存
一個Activity的生命
共有三段 : Entire、Visible、Foreground
四個狀態 : Activite、Paused、Stopped、Dead
由七個函數控制 : onCreate、onStart、onResume、onPause
onRestart、onStop、onDestory
具體運作流程如下圖
只要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布局、資源讀取
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因為事情很雜,所以有必要分配好流程
生命週期除了扮演流程上的設計階段
也決定著不同狀態,被系統處理掉的先後
因為最貼近使用者體驗
所以每個步驟跟模式都要特別注意