1. 程式人生 > >Activity 生命週期的個人理解與四種啟動模式

Activity 生命週期的個人理解與四種啟動模式

activity為Android四大元件之一

    activity被稱之為活動主要實用為實現使用者與程式之間的互動

接下來我們先來看Activity生命週期流程圖:



Activity在被我們進行操作時會在四種形態中相互切換

   Activity 的形態

Active/Running:
Activity處於活動狀態,此時Activity處於棧頂,是可見狀態,可與使用者進行互動。
Paused
當Activity失去焦點時,或被一個新的非全屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉化為Paused狀態。但我們需要明白,此時Activity只是失去了與使用者互動的能力,其所有的狀態資訊及其成員變數都還存在,只有在系統記憶體緊張的情況下,才有可能被系統回收掉。
Stopped


當一個Activity被另一個Activity完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態,此時它不再可見,但是跟Paused狀態一樣保持著其所有狀態資訊及其成員變數。
Killed

當Activity被系統回收掉時,Activity就處於Killed狀態。


瞭解了Activity的4種形態後,我們就來聊聊Activity的生命週期。

   OnCreate:建立Acticvity時執行該方法

   OnStart:啟動Activity時執行該方法

   OnResume:重新執行Activity 本生命週期每次執行Activity都會被執行到 (當Activity從暫停狀態被重新使用成為Running形態都會重新呼叫OnResume

   OnPause:為Activity的暫停狀態 (當Activity未被完全覆蓋或鎖屏時成為暫停狀態)

   OnStop:為Activity的停止狀態 (當Activity被完全覆蓋或進入到後臺成為停止狀態)

   OnRestart:重新啟動Acivity(當 Activity從停止狀態被重新使用成為Running形態都會重新呼叫OnRestart

   OnDestroy:當Activity退出或者被回收是執行,僅執行一次



Activity正常啟動順序:

Activity: onCreate

Activity: onStart

Activity: onResume


Activity正常退出順序:

Activity: onPause

Activity: onStop

Activity: onDestroy


當我們認識了各個生命週期之後下面我們來了解一下當我們執行Activity時生命週期的執行狀態

1.啟動Activity:系統會先呼叫onCreate方法,然後呼叫onStart方法,最後呼叫onResume,Activity進入執行狀態。

2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會呼叫onPause方法,暫停當前Activity的執行。

3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會呼叫onResume方法,再次進入執行狀態。

4.當前Activity轉到新的Activity介面或按Home鍵回到主屏,自身退居後臺:系統會先呼叫onPause方法,然後呼叫onStop方法,進入停滯狀態。

5.使用者後退回到此Activity:系統會先呼叫onRestart方法,然後呼叫onStart方法,最後呼叫onResume方法,再次進入執行狀態。

6.當前Activity處於被覆蓋狀態或者後臺不可見狀態,即第2步和第4步,系統記憶體不足,殺死當前Activity,而後使用者退回當前Activity:再次呼叫onCreate方法、onStart方法、onResume方法,進入執行狀態。

7.使用者退出當前Activity:系統先呼叫onPause方法,然後呼叫onStop方法,最後呼叫onDestory方法,結束當前Activity。


Activity的啟動模式

  1. standard:每次啟用Activity時(startActivity),都建立Activity例項,並放入任務棧。
  2. singleTop:如果某個Activity自己啟用自己,即任務棧棧頂就是該Activity,則不需要建立,其餘情況都要建立Activity例項。
  3. singleTask:模式使Activity在整個應用程式中只有一個例項。每次啟動Activity時系統首先檢查棧中是否存在當前Activity例項,如果存在則直接複用,並把當前Activity之上所有例項全部出棧。例如:瀏覽器主介面
  4. singleInstance:該模式的Activity會啟動一個新的任務棧來管理Activity例項,並且該勢力在整個系統中只有一個。無論從那個任務棧中    啟動該Activity,都會是該Activity所在的任務棧轉移到前臺,從而使Activity顯示。主要作用是為了在不同程式中共享一個Activity例項。