close

今天來說說Android Activity 的生命週期
這是滿重要的一環
很多app沒有注意到 lifecycle 
導至使用者的不便
甚至是資料的遺失
那麼就讓我們來看看吧

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

Active (活動)
Activity 在運行中的狀態
在 Android 平台上,一個時刻只會有一個 Activity 處於Active 或 Running 狀態。

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

Stopped (停止)
Stopped狀態表示這個 Activity 已經離開螢幕
透過長按Home鍵,可以叫出所有處於Stopped狀態的Application List(應用程式列表)

Dead (死亡)
Dead狀態是 Activity 被終止或被系統回收的狀態
要終止 Activity,可以在程式中呼叫 finish()
而系統回收是在記憶體不足時
系統會優先將處於Stopped狀態的 Activity結束
來釋放所佔用的記憶體

State diagram for an Android Activity Lifecycle.

點我看官網介紹

這張圖包含了Activity出生到死亡的所有動作

一開始啟動時的呼叫順序為
onCreate -> onStart -> onResume

如果中途呼叫了另一個Activity時
onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)
先暫停第一個,等第二個完成啟動時才stop

那把剛剛的Activity再叫回來呢?
onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2)
上面就是我們按Back鍵所發生的情況

最後Activity結束的流程是
onPause -> onStop -> onDestroy
在Destroy後要再啟動Activity就必需從Create開始整套的流程喔!!

 

總結幾個Callback Method的使用時機:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //用來做程式的初使化動作
}
@Override
protected void onStart() {
    super.onStart();
    //當Activity變得可見時調用該函數
}
@Override
protected void onResume() {
    super.onResume();
    //把保存的資料拿回來使用
}
@Override
protected void onPause() {
    super.onPause();
    //時把需要保存的資料保存
}
@Override
protected void onStop() {
    super.onStop();
    //Activity變得不可見時調用該方法
}
@Override
protected void onDestroy() {
    super.onDestroy();
    //通常都拿來把onCreate()時的資料做釋放的動作
}
@Override
protected void onRestart() {
    super.onRestart();
    //再次啟動之前將會調用該方法
}


我們了解Activity的生命週期後
就可以在適當的時機點來做我們想做的事
包括動畫、介面…等

那就讓我們來試試看吧


參考資料:
https://developer.android.com/reference/android/app/Activity.html
http://tyroandroid.blogspot.tw/2009/07/android-activity.html
http://peimei0808.pixnet.net/blog/post/303469485-%5Bandroid%5D-activity%E7%94%9F%E5%91%BD%E9%80%B1%E6%9C%9F%E4%B9%8B%E4%BB%8B%E7%B4%B9(%E4%BA%8C)

 


arrow
arrow
    全站熱搜

    顏澤偉 發表在 痞客邦 留言(0) 人氣()