android activity詳解二:Activity的生命周期 – Android移動開發技術文章_手機開發 Android移動開發教學課程

管理Activity的生命周期
  通過實現activity的生命周期回調方法來管理你的activity,是創造既穩定又靈活的activity的關鍵。Activity的生命周期直接受到相關的其它activity和它的任務以及所在棧的影響。

一個activity可生存在三種基本的狀態中:

Resumed

  Activity位於屏幕的最上層,並具有用戶焦點,用戶可以操作它。(此狀態有時也被認為是“運行”狀態)。

Paused

  Activity B位於最上層並其獲得輸入焦點,acitvity A位於其下一層,但activity A依然可見,此時activity A就處於Paused狀態。Activity A可見的原因可能是activity B是半透明的,或acitvity B不覆蓋整個屏幕。此狀態的activity依然是“活”的,因為它還是位於內存中,並且它被窗口管理器所管理。它隻要獲取到CPU時間片它就可以接著運行,當然系統此時是不想讓它運行的,所以不給它CPU時間片。此狀態的activity在RAM剩餘極少時,可能被系統殺掉。

Stoped

  一個Activity如果被其它activity完全遮蓋,那麼它就處於Stoped狀態。此時它處於“後臺”。此狀態的activity也是“活”的,它依然位於內存中,但是窗口管理器中把它除名。然而,它不再被用戶看到並且系統可以在其它組件需要內存時把它殺掉,也就是說它比paused狀態的更容易被殺害。

如果一個activtiy處於paused或stoped狀態,系統可以殺死它。殺死它的方法有比較溫和的:請求activity用finish()自殺,或直接用暴力的方法:殺掉activity所在的進程。不論怎樣,activity被從內存中移除。當被殺或自殺的activity重新啟動時,它必須被從頭創建。

 

 

實現生命周期回調

public class ExampleActivity extends Activity {

    public voidonCreate(Bundle savedInstanceState) {

        // Theactivity is being created.

    @Override

        super.onStart();

    }

    protected voidonResume() {

        // Theactivity has become visible (it is now "resumed").

    @Override

       super.onPause();

    }

    protected voidonStop() {

        // Theactivity is no longer visible (it is now "stopped")

    @Override

       super.onDestroy();

    }

註意:當你覆寫以上函數時,必須首先調用父類的同一方法,就像上例中所示。

這六個方法涵蓋瞭activity的整個生命周期,覆寫這些方法們,可以監視activity生命周期中三種狀態的嵌套循環:

l  Activity的可見期位於onStart()和onStop()之間。在可見期內,用戶可以看到activity並與它交互。例如:onStop() 在新的activity啟動並且當前activity不在被看到時被調用。在可見期內,你可以在內存中保持與activity顯示相關的資源。例如:你可以在onStart()中註冊一個BroadcastReceiver,以監視對界面有影響的系統事件(比如主題或字體的改變);並其在onStop()中取消註冊,因為此時用戶看不到這個activity的界面瞭。在整個生命周期中,onStart()和onStop()會被多次調用,因為activity可能多次顯示又隱藏,隱藏又顯示…

下圖展示瞭這些循環以及在狀態切換時activity所經過的步驟。方框表示回調方法。

 

 

下表更詳細的介紹瞭生命周期函數的事項。

方法

 

方法
完成後可殺掉?
onCreate() onRestart() onStart() onResume() onPause() onStop() onDestroy() 註:activity在上表中標明不可殺的地方,其實也是可殺的,當然那就是一種非正常現象瞭,就象windows下的強制退出。關於activity什麼時可能被殺的更多信息,請參考“進程與線程”一文。

摘自 nkmnkm的專欄

 

發佈留言