Android學習筆記--Activity的生命週期

 

Activity的生命週期

 

       Activity通過一個Activity棧來進行管理。當一個新的Activity啓動的時候,它會首先被放置在Activity棧頂部,並且該 Activity的狀態爲Running,之前的Activity也在Activity棧中,但是被保存在它的下邊,只有當這個新的Activity推出之後,以前的Activity才能重新回到前景界面。


Activity有四種基本狀態:

       Active/Running:一個新的Activity啓動入棧之後,它位於屏幕的最前端,Activity棧的最頂端,此時它處於可見並可以和用戶交互的狀態。

       Paused:Activity失去了焦點,但仍然可見,這時爲Paused狀態。例如,被另一個透明的或者Dialog樣式的Activity覆蓋時的狀態。因爲失去了焦點,故不可與用戶交互。

       Stopped:當Activity被另一個Activity完全覆蓋、失去焦點,並不可見,這叫處於Stopped狀態,它仍然保持着所有的狀態和成員 信息,但對於用戶來講,它是不可見的。當系統內存需要被用在其他地方的時候,Stopped的Activity將被殺掉。

       Killed Activity:被系統殺死回收或者沒有被啓動時處於Killed狀態。Activity爲Paused或者Stopped狀態,系統需要清理內存時, 可以通過finish或者kill結束其進程。當需要重新顯示時,必須完全啓動,並將其關閉之前的狀態全部恢復。


Activity有三個關鍵的生命週期:

1.   完 整生命週期,從onCreate(Bundle)開始到onDestroy()結束。Activity在onCreate()設置所有的“全局”狀態,在 onDestory()釋放所有的資源。例如:某個Activity有一個在後臺運行的線程,用於從網絡下載數據,則該Activity可以在 onCreate()中創建線程,在onDestory()中停止線程。

2.   可見的生命週期,從onStart()開始到 onStop()結束。在這段時間,可以看到Activity在屏幕上,儘管有可能不在前臺,不能和用戶交互。在這兩個接口之間,需要保持顯示給用戶的 UI數據和資源等,例如:可以在onStart中註冊一個IntentReceiver來監聽數據變化導致UI的變動,當不再需要顯示時候,可以在 onStop()中註銷它。onStart(),onStop()都可以被多次調用,因爲Activity隨時可以在可見和隱藏之間轉換。

3.   前 臺的生命週期,從onResume()開始到onPause()結束。在這段時間裏,該Activity處於所有 Activity的最前面,和用戶進行交互。Activity可以經常性地在resumed和paused狀態之間切換,例如:當設備準備休眠時,當一個 Activity處理結果被分發時,當一個新的Intent被分發時。所以在這些接口方法中的代碼應該屬於非常輕量級的。

 

Activity類中定義了8個方法,可以通過重寫這些方法達到在Activity轉改改變時執行你所期望的操作。當實現這些方法是,需要注意的是一定要調用父類的對應方法。


public class Activity extendsAplicationContext {

     protected void onCreate(Bundle icicle);

     protected void onStart();

     protected void onResume();

     protected void onFreeze(Bundle outIcicle);

     protected void onPause();

     protected void onStop();

     protected void onDestroy();

}


 上述方法的含義用下表解釋:


方法 描述 完成後可否被殺掉? 下一個方法
onCreate(Bundle)

Activity初次創建時調用該方法。一般情況下,我們會重寫該方法,並作爲應用程序的入口,在這個方法中可以進行初始化數據、設置用戶界面等操作。大多數情況下,我們需要在這裏加載用戶界面xml資源文件,例如setContentView(R.layout.main),如果Activity之前存在凍結狀態,那麼此狀態將在Bundle中提供,如果Activity首次創建,本方法後將會調用onStart()方法,如果Activity是停止後重新顯示,將調用onRestart()方法。

onStart()

onStart()

該方法在onCreate()方法之後被調用,或者在從Activity從Stopped狀態轉換爲Active狀態時調用。其後調用onRestart()方法或者onResume()方法。

onResume()

onStop()
onRestart()

當Activity從停止狀態重新啓動時調用。其後調用Resume()方法。

onStart()
onResume() 當Activity將要與用戶交互時調用此方法,此時Activity在棧頂,用戶輸入已經可以傳遞給它。如果其它的Activity在它的上方恢復顯示,則將調用onFreeze()方法。 onPause()
onFreeze(Bundle) 當Activity暫停,其它的Activity恢復與用戶交互的時候調用這個方法。    
onPause() 當系統要調用其他的Activity時調用,一般該方法用來提交數據的改變,停止動畫,和其它佔用CPU資源的東西。如果Activity重新回到前景則調用onResume()方法,如果對用戶徹底不可見則調用onStop()方法。 onResume()

onStop()
onStop() 當其他Activity恢復並遮蓋此Activity,導致此用戶不可見時調用。當Activity重新回到前景與用戶交互時調用onRestart()方法,如果Activity將退出則調用onDestroy()方法。 onRestart()

onDestroy()
onDestroy 在Activity被銷燬前調用的最後一個方法,當進程終止時會出現這種情況(調用Activity提過的一個finish()方法或者系統爲了節省空間而臨時銷燬Activity的實例,可以通過isFinishing()方法返回值區分這兩種情況)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章