天天看點

Android的Activity的詳解Android的Activity的詳解

Android的Activity的詳解

一·activity的形态

1.1 Active/Running:

Activity處于活動狀态,此時Activity處于棧頂,是可見狀态,可與使用者進行互動。

1.2 Paused:

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

1.3 Stopped:

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

1.4 Killed:

當Activity被系統回收掉時,Activity就處于Killed狀态。

Activity會在以上四種形态中互相切換,至于如何切換,這因使用者的操作不同而異。了解了Activity的4種形态後,我們就來聊聊Activity的生命周期。

二·activity的生命周期

2.1 activity的生命周期圖

Android的Activity的詳解Android的Activity的詳解

2.2 生命周期方法使用

oncreate()方法

該方法是在Activity被建立時回調,它是生命周期第一個調用的方法,我們在建立Activity時一般都需要重寫該方法,然後在該方法中做一些初始化的操作,如通過setContentView設定界面布局的資源,初始化所需要的元件資訊等。

2.3 onStart()方法

啟此方法被回調時表示Activity正在啟動,此時Activity已處于可見狀态,隻是還沒有在前台顯示,是以無法與使用者進行互動。可以簡單了解為Activity已顯示而我們無法看見擺了。

2.4 onResume()方法

當此方法回調時,則說明Activity已在前台可見,可與使用者互動了(處于前面所說的Active/Running形态),onResume方法與onStart的相同點是兩者都表示Activity可見,隻不過onStart回調時Activity還是背景無法與使用者互動,而onResume則已顯示在前台,可與使用者互動。當然從流程圖,我們也可以看出當Activity停止後(onPause方法和onStop方法被調用),重新回到前台時也會調用onResume方法,是以我們也可以在onResume方法中初始化一些資源,比如重新初始化在onPause或者onStop方法中釋放的資源。

2.5 onPause()方法

此方法被回調時則表示Activity正在停止(Paused形态),一般情況下onStop方法會緊接着被回調。但通過流程圖我們還可以看到一種情況是onPause方法執行後直接執行了onResume方法,這屬于比較極端的現象了,這可能是使用者操作使目前Activity退居背景後又迅速地再回到到目前的Activity,此時onResume方法就會被回調。當然,在onPause方法中我們可以做一些資料存儲或者動畫停止或者資源回收的操作,但是不能太耗時,因為這可能會影響到新的Activity的顯示——onPause方法執行完成後,新Activity的onResume方法才會被執行。

2.6 onStop()方法

一般在onPause方法執行完成直接執行,表示Activity即将停止或者完全被覆寫(Stopped形态),此時Activity不可見,僅在背景運作。同樣地,在onStop方法可以做一些資源釋放的操作(不能太耗時)。

2.7 onDestory()方法

此時Activity正在被銷毀,也是生命周期最後一個執行的方法,一般我們可以在此方法中做一些回收工作和最終的資源釋放。

下面我們通過程式來驗證上面流程中的幾種比較重要的情況,同時觀察生命周期方法的回調時機。

2.8 onRestart()方法

表示Activity正在重新啟動,當Activity由不可見變為可見狀态時,該方法被回調。這種情況一般是使用者打開了一個新的Activity時,目前的Activity就會被暫停(onPause和onStop被執行了),接着又回到目前Activity頁面時,onRestart方法就會被回調

Android的Activity的詳解Android的Activity的詳解

3.2 onSaveInstanceState()和onRestoreInstanceState()方法

1、正常啟動Activity時,onCreate,onStart,onResume方法都會依次被回調,而如果我們此時把豎屏的Activity人為的調整為橫屏,我們可以發現onPause,onSaveInstanceState,onStop,onDestroy,onCreate,onStart,onRestoreInstanceState,onResume依次被調用,單從調用的方法我們就可以知道,Activity先被銷毀後再重新建立

2、這裡有點需要特别注意,onSaveInstanceState和onRestoreInstanceState隻有在Activity異常終止時才會被調用的,正常情況是不會調用這兩個方法的。