1. 程式人生 > >Android----Activity生命週期

Android----Activity生命週期

Android中是通過Activity棧來管理創建出的Activity,當一個新的Activity被啟動時,這個新的Activity就會被加入到Activity棧的棧頂,同時呈現到使用者前臺,供使用者互動,原來的棧頂元素被壓入到第二位置,但是它的狀態資訊還儲存著。

 oncreate():在onCreate方法中我們初始化我們的Activity,比如,載入佈局檔案,獲取控制元件(findViewById),繫結觸控事件與使用者進行操作等。一般情況下,Activity生命週期的切換不會再觸發這個方法的執行,只有當系統極度缺乏記憶體資源,並且這個Activity沒有處在使用者前臺時,此時該Activity可能被殺死,當再次回到這個Activity,因為這個Activity已被殺死,此時就需要重新建立(就相當於重新startActivity()了),因此會再次進入onCreate進行初始化工作。

onStart()onResume():在載入完佈局後,系統執行一些內部的啟動操作,執行到onResume時,使用者可以看到完整的UI介面了,此時Activity處於執行狀態。

onPause()當前的Activity失去了焦點,但依然可以看見,比如當我們點選了一個對話框出來、打開了一個非全屏的Activity、打開了一個透明的Activity,此時原來的Activity就會進入onPause()方法,它依然持有狀態資訊和記憶體資源,只有當系統極度缺乏記憶體資源時,才會殺死處於onPause狀態的Activity

onStop():當一個Activity被另一個Activity完全覆蓋

的時候,對使用者來說這個Activity不可見了,此時這個Activity就進入onStop狀態,它也依然儲存著狀態資訊和資源,但是容易被系統殺死,當記憶體不是那麼充足的時候。

onDestory():當Activity處於onPause和onStop狀態時,系統可能因系統資源吃緊會殺死該Activity,在系統回收該Activity之前,會呼叫onDestory()方法,在裡面進行一些資源的釋放工作。onDestory()的呼叫,可能是使用者主動的行為,也可能是因系統資源不足系統需要回收該Activity,在回收前呼叫。

處於onPause和onStop狀態的Activity再次回到前臺時,需要系統還原一些狀態,對於onPause狀態,由於它處於"比較活躍的一種狀態",只需要進入到onResume中由系統設定一些資訊即可重新回到前臺,對於onStop狀態,因為它處於很有可能被銷燬的一種狀態,部分資源可能丟失,需要先進入onRestart(),然後再次進入onStart()方法,進行回到前臺的準備工作。

The visible lifetime(可見的生命週期) :從onStart()到進入onStop()前(即onStart-->onPause),這個Activity都可被使用者看見,這期間,不一定處於前臺,也不一定能夠供使用者互動(比如處於onPause狀態時)

The foreground lifetime(前臺生命週期):從onResume()到進入onPause前,這個期間,Activity處於可以和使用者互動時期。這個時期,可能也會頻繁在onResume和onPause狀態間切換。

其他

1、技術上,Activity會在 onStart() 被呼叫時變得可見,但緊接著是 onResume(),且Activity保持“繼續”狀態,直到有事情發生使其發生變化,比如當接聽來電時,使用者導航至另一個Activity,或裝置螢幕關閉。

2、無論什麼場景導致Activity停止,系統始終會在呼叫 onStop() 之前呼叫 onPause()

3、每次使用者旋轉螢幕時,您的Activity將被銷燬並重新建立。 當螢幕方向變化時,系統會銷燬並重新建立前臺Activity,因為螢幕配置已更改並且您的Activity可能需要載入備用資源(比如佈局)。

4、要儲存有關Activity狀態的其他資料,您必須替代 onSaveInstanceState() 回撥方法。當用戶要離開Activity並在Activity意外銷燬時向其傳遞將儲存的 Bundle 物件時,系統會呼叫此方法。 如果系統必須稍後重新建立Activity例項,它會將相同的 Bundle 物件同時傳遞給 onRestoreInstanceState() 和 onCreate() 方法。

5、當系統開始停止您的Activity時,它會 呼叫 onSaveInstanceState() (1),因此,您可以指定您希望在 Activity 例項必須重新建立時儲存的額外狀態資料。如果Activity被銷燬且必須重新建立相同的例項,系統將在 (1) 中定義的狀態資料同時傳遞給 onCreate() 方法(2) 和 onRestoreInstanceState() 方法(3)。

6、要儲存Activity的更多狀態資訊,必須實現 onSaveInstanceState() 並將鍵值對新增至 Bundle 物件。

7、可以選擇實現系統在 onStart() 方法之後呼叫的 onRestoreInstanceState() ,而不是在onCreate() 期間恢復狀態。 系統只在存在要恢復的已儲存狀態時呼叫 onRestoreInstanceState() ,因此無需檢查 Bundle 是否為 null。

8、當Activity處於onPause和onStop狀態時都有可能被系統回收,因此對於我們該Activity中的一些關鍵資料最好能夠儲存下來,當用戶再次進入時能夠回到原來的狀態。官方文件中是推薦我們在onPause()中區儲存資訊的。