天天看點

Activity生命周期詳解

Activity的生命周期

Activity的生命周期始于onCreate(),止于onDestory()。

Activity的基本生命周期如下代碼 所示:

public  class MyActivity extends Activity {

protected  void onCreate(Bundle savedInstanceState);

protected  void onStart();

protected  void onResume();

protected  void onPause();

protected  void onStop();

protected  void onDestroy();

}

我們自己寫的Activity會按需要 重載這些方法,在一個Activity正常啟動的過程中,他們被調用的順序是 onCreate -> onStart -> onResume, 在Activity被pass掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命周期,但是有人問了 ,程式正運作着呢來電話了,這個程式咋辦?中止了呗,如果中止的時候新出的一個Activity是全屏的那麼:onPause->onStop ,恢複的時候onStart->onResume ,如果打斷 這個應用程式的是一個Theme為Translucent 或者Dialog 的Activity那麼隻是onPause ,恢複 的時候onResume 。

詳細介紹一下這幾個方法中系統在做什麼以及我們應該做什麼:

onCreate: 在這裡建立界面 ,做一些資料 的初始化工作

onStart: 到這一步變成使用者可見不可互動 的

onResume: 變成和使用者可互動 的,(在activity 棧系統通過棧的方式管理這些個

Activity的最上面,運作完彈出棧,則回到上一個Activity)

onPause: 到這一步是可見但不可互動 的,系統會停止動畫 等消耗CPU 的事情

從上文的描述已經知道,應該在這裡儲存你的一些資料,因為這個時候

你的程式的優先級降低,有可能被系統收回。在這裡儲存的資料,應該在

onResume裡讀出來,注意:這個方法裡做的事情時間要短,因為下一

個activity不會等到這個方法完成才啟動

onstop: 變得不可見 ,被下一個activity覆寫了

onDestroy: 這是activity被幹掉前最後一個被調用方法了,可能是外面類調用finish方

法或者是系統為了節省空間将它暫時性的幹掉,可以用isFinishing()來判

斷它,如果你有一個Progress Dialog線上程中轉動,請在onDestroy裡

把他cancel掉,不然等線程結束的時候,調用Dialog的cancel方法會抛

異常的。

onPause,onstop, onDestroy,三種狀态 下 activity都有可能被系統幹掉

為了保證程式的正确性,你要在onPause()裡寫上持久層操作的代碼,将使用者編輯的内容都儲存到存儲媒體上(一般都是資料庫 )。實際工作中因為生命周期的變化而帶來的問題也很多,比如你的應用程式起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停還是殺掉還是資料 復原,是吧?因為Activity可能被殺掉,是以線程中使用的變量和一些界面元素就千萬要注意了,一般都是采用Android的消息機制 [Handler,Message]來處理多線程和界面互動的問題。

繼續閱讀