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

/*********************************************************************************************************************/

此博客原本是本人學習Android過程中自己所做的學習筆記,在此分享出來供大家學習,因爲之前只是個人筆記僅供自己回顧複習,所以筆記裏可能借鑑了其他人的一些資料,整理博客的過程中已經忘了資料的來源,所以未做標註,望被鄙人借鑑了資料的原創者們見諒。

/*******************************************************************************************/

活動棧

Android 中的活動是可以層疊的。我們每啓動一個新的活動,就會覆蓋在原活動之上,然後點擊 Back 鍵會銷燬最上面的活動,下面的一個活動就會重新顯示出來。

其實 Android 是使用任務(Task)來管理活動的,一個任務就是一組存放在棧裏的活動的集合,這個棧也被稱作返回棧(Back Stack)。棧是一種後進先出的數據結構,在默認情況

下,每當我們啓動了一個新的活動,它會在返回棧中入棧,並處於棧頂的位置。而每當我們按下 Back 鍵或調用 finish()方法去銷燬一個活動時,處於棧頂的活動會出棧, 這時前一個入棧的活動就會重新處於棧頂的位置。系統總是會顯示處於棧頂的活動給用戶。


/*********************************************************************************************************************/

生命週期

Activity有三個狀態: 

當它在屏幕前臺時(位於當前任務堆棧的頂部),它是激活或運行狀態。它就是響應用戶操作的Activity。 

當它上面有另外一個Activity,使它失去了焦點但仍然對用戶可見時(如右圖),它處於暫停狀態。在它之上的Activity沒有完全覆蓋屏幕,或者是透明的,被暫停的Activity仍然對用戶可見,並且是存活狀態(它保留着所有的狀態和成員信息並保持和窗口管理器的連接)。如果系統處於內存不足時會殺死這個Activity。

當它完全被另一個Activity覆蓋時則處於停止狀態。它仍然保留所有的狀態和成員信息。然而對用戶是不可見的,所以它的窗口將被隱藏,如果其它地方需要內存,則系統經常會殺死這個Activity。 當Activity從一種狀態轉變到另一種狀態時,會調用以下保護方法來通知這種變化:

void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()

這七個方法定義了Activity的完整生命週期。實現這些方法可以幫助我們監視其中的三個嵌套生命週期循環:  

Activity的完整生命週期自第一次調用onCreate()開始,直至調用onDestroy()爲止。Activity在onCreate()中設置所有“全局”狀態以完成初始化,而在onDestroy()中釋放所有系統資源。例如,如果Activity有一個線程在後臺運行從網絡下載數據,它會在onCreate()創建線程,而在 onDestroy()銷燬線程。 

Activity的可視生命週期自onStart()調用開始直到相應的onStop()調用結束。在此期間,用戶可以在屏幕上看到Activity,儘管它也許並不是位於前臺或者也不與用戶進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個Activity所需的資源。例如,當用戶不再看見我們顯示的內容時,我們可以在onStart()中註冊一個BroadcastReceiver來監控會影響UI的變化,而在onStop()中來注消。onStart() 和 onStop() 方法可以隨着應用程序是否爲用戶可見而被多次調用。 
 
Activity的前臺生命週期自onResume()調用起,至相應的onPause()調用爲止。在此期間,Activity位於前臺最上面並與用戶進行交互。Activity會經常在暫停和恢復之間進行狀態轉換——例如當設備轉入休眠狀態或者有新的Activity啓動時,將調用onPause() 方法。當Activity獲得結果或者接收到新的Intent時會調用onResume() 方法。關於前臺生命週期循環的例子請見下方。

















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章