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需要使用者請求才能實現。