1. 程式人生 > >Android問題:Activity生命週期事件

Android問題:Activity生命週期事件

四狀態:活躍、暫停、停止、銷燬。

當Android中Activity在執行的時候,Activity的活動狀態由Android和Activity棧的形式管理。當前活動的Activity位於棧頂。

隨著不同應用的執行,每個Activity都可能在活動狀態和非活動狀態之間切換。

活躍:使用者啟動,在前臺執行,可獲得焦點;

暫停:執行且可見,但是被某通知或者事件覆蓋掉了,使用者可以看到activity但是不能與之互動,不能獲得焦點;

停止:被啟動的其他activity隱藏掉了,應用程式無法向用戶展示任何有意義的內容,失去焦點;

死亡:activity結束,或者activity的dalvik程序結束,可能是因為記憶體不足或者其他原因。


在activity的生命週期中,以下方法會被回撥:

onCreate(Bundle savedStatus):建立activity時被回撥;

onStart():啟動activity時被回撥;

onRestart():重啟activity時被回撥:

onResume():恢復activity時被回撥:

onPause():暫停時被回撥:

onStop():停止activity時被回撥;

onDestroy():銷燬activity時被回撥。

開發activity的時候,可以根據需要選擇性的覆蓋指定方法,最常見的是覆蓋onCreate()方法,用於對該activity的初始化。

當然,也可以覆蓋onPause()方法,暫停該activity去做其他的事情。

程式碼例項:

@Override
public void onSop()
{
      super.onStop();
       //TODO SOMETHING
 
}

onCreate()和onDestroy():

activity首次啟動的時候,使用一個null引數呼叫onCreate();

activity已經執行,如果在隨後的某個時刻被結束,將使用來自onSaveInstanceState()的Bundle作為引數呼叫onCreate(),但是如果是將activity設定為不同的手機狀態提供不同的資源,那麼將重新建立activity並且呼叫onCreate()。這都是需要一次性完成的操作。

生命週期的另外一端,activity關閉時會呼叫onDestroy(),這可能是因為activity呼叫了finish()來完成activity,也可能是記憶體不夠需要關閉activity。

onDestroy()其實就是為了釋放在onCreate()中獲得的資源。

onStart()、onRestart()和onStop():

activity在前臺執行的時候,可能是因為他首次啟動,也可能是在被某個activity或者呼入電話隱藏了以後再次被呼叫回到前臺,這樣就需要onStart();

停止後重新啟動activity,將呼叫onRestart()方法;

停止activity將要呼叫onStop()方法。

onPause()和onResume():

在activity被啟動後,不管是首次還是隱藏後的啟動、還是停止後的啟動,回到前臺之前要呼叫onResume()。

可以在此時通過使用者上一次檢視activity之後可能發生的操作來重新整理的一次UI;.

但是,如果要使用者遠離activity的任何操作,那麼要onPause(),而撤銷在onResume()中的操作,比如停止後臺執行緒,釋放所獲得的獨佔訪問資源.

呼叫onPause()後,Android可以在任何時候結束activity的程序。

如果activity能夠儲存下來應用程式例項的狀態是最好的,這樣方便應用程式間進行切換。

例項狀態的儲存應該由onSaveInstanceState()處理。它提供一個Bundle,activity可以向bundle填充需要的任何資料(計算器顯示的資料等),此方法實現需非常快,放入資料快速退出。

該例項狀態在onCreate()和onRestoreInstanceState()中再次提供。重新需要獲得activity的狀態時,這兩呼叫可以根據具體情況用一個。

Activity與severlet的相似之處:

都向使用者呈現介面;都繼承系統的基類;開發後都需要進行配置;他們的方法都需要系統以回撥的方式來呼叫;都有各自的生命週期,各自的生命週期都由於外部負責管理;

都不哼直接相互呼叫,不能直接進行資料交換,activity之間的資料交換需要藉助於Bundle;activity最終會以視窗的形式呈現,但是servlet向瀏覽者生成文字響應;activity的本質

是通過各種介面元件搭建介面;activity之間的跳轉實現由Intent意圖來控制,servlet需要使用者請求才能實現。