筆記一:activity生命周期

轉:http://blog.csdn.net/qq_23547831/article/details/41693807

Activity生命周期

在系統中的Activity被一個Activity棧所管理。當一個新的Activity啟動時,將被放置到棧頂,成為運行中的Activity,前一個Activity保留在棧中,不再放到前臺,直到新的Activity退出為止。

一、Activity有四種本質區別的狀態:

1.在屏幕的前臺(Activity棧頂),叫做活動狀態或者運行狀態(active or running);

2.如果一個Activity失去焦點,但是依然可見(一個新的非全屏的Activity或者一個透明的Activity被放置在棧頂),叫做暫停狀態(Paused)。一個暫停狀態的Activity依然保持活力(保持所有的狀態,成員信息,和窗口管理器保持連接),但是在系統內存極端低下的時候將被殺掉。

3.如果一個Activity被另外的Activity完全覆蓋掉,叫做停止狀態(Stopped)。它依然保持所有狀態和成員信息,但是它不再可見,所以它的窗口被隱藏,當系統內存需要被用在其他地方的時候,Stopped的Activity將被殺掉。

4.如果一個Activity是Paused或者Stopped狀態,系統可以將該Activity從內存中刪除,Android系統采用兩種方式進行刪除,要么要求該Activity結束,要么直接殺掉它的進程。當該Activity再次顯示給用戶時,它必須重新開始和重置前面的狀態。

二、

activity生命周期圖

在上圖中,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的生命周期

?整個的生命周期,指的是onCreate(Bundle)和onDestroy()之間過程。Activity在onCreate()設置所有的“全局”狀態,在onDestroy()釋放所有的資源。

?可見的生命周期,指的是onStart()onStop()之間的過程。在這段時間,可以看到Activity在屏幕上,盡管有可能不在前臺,不能和用戶交互。在這兩個接口之間,需要保持顯示給用戶的UI數據和資源等。onStart()onStop()都可以被多次調用,因為Activity隨時可以在可見和隱藏之間轉換。

?前臺的生命周期,指的是onResume()onPause()之間的過程。在這段時間里,該Activity處于所有 Activity的最上面,獲得了用戶焦點。Activity可以經常性地在RESUMED和PAUSED狀態之間切換,所以在這些接口方法中的代碼應該屬于非常輕量級的,避免低效的轉換而讓用戶有等待的感覺。

三、由此,我們可以得出下面幾個典型的場景

1) Activity從被裝載到運行。則執行順序為:onCreate()->onStart()->onResume();

這是個典型過程,發生在Activity被系統裝載運行時。

2) Activity從運行到暫停,再到繼續回到運行。執行順序為:onPause()->onResume();

這個過程發生在Activity被別的Activity遮住了部分UI,失去了用戶焦點,另外那個Activity退出之后,這個Activity再次重新獲得運行。這個過程中該Activity的實例是一直存在。

3) Activity從運行到停止。執行順序為:onPause()->onStop();

這個過程發生在Activity的UI完全被別的Activity遮住了,當然也失去了用戶焦點。這個過程中Activity的實例仍然存在。比如,當Activity正在運行時,按HOME鍵,該Activity就會被執行這個過程。

4) Activity從停止到運行。執行順序為:onRestart()->onStart()->onResume();

處于STOPPED狀態并且實例仍然存在的Activity,再次被系統運行時,執行這個過程。這個過程是3的逆過程,只是要先執行onRestart()而重新獲得執行。

5) Activity從運行到銷毀。執行順序為:onPause()->onStop()->onDestroy();

這個過程發生在Activity完全停掉并被銷毀了,所以該Activity的實例也就不存在了。比如,當Activity正在運行時,按BACK鍵,該Activity就會被執行這個過程。這個過程可看作是1的逆過程。

6) 被清除出內存的Activity重新運行。執行順序為:onCreate()->onStart()->onResume();

這個過程對用戶是透明的,用戶并不會知道這個過程的發生,看起來如同1的執行順序,不同的是如果保存有系統被清除出內出時的信息,會在調用onCreate()時,系統以參數的形式給出,而1中onCreate()的參數為null。

四、下面闡述幾種比較常見的情況:

(1) 單個A Activity啟動回調流程

onCreate

onStart

onResume

(2) 當用戶按下home鍵時

onPause

onStop

(3) 當用戶再次回到原Activity時

onRestart

onStart

onResume

(4) 在A Activity的基礎上,打開新的B Activity,此時需要注意的問題是B Activity的大小和透明度

a. B Activity完全覆蓋A Activity,并且B Activity是不透明的:

A Activity: onPause

B Activity: onCreate --> on Start --> onResume

A Activity : onStop

b. B Activity因為尺寸小沒有完全覆蓋A Activity,或者B Activity是透明的, 此時A Activity的onStop方法是不會被執行的

A Activity: onPause

B Activity: onCreate --> on Start --> onResume

(5) 當用戶按back鍵時

onPause

onStop

onDestory

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 啟動與銷毀Activity 不同于使用 main() 方法啟動應用的其他編程范例,Android 系統會通過調用對...
    安卓Boy閱讀 1,778評論 3 5
  • Activity作為四大組件之一,是使用頻率最高的組件,也是直接為用戶提供主體的操作主件,基本上我們在Androi...
    倚欄靜望閱讀 591評論 0 0
  • 悵懷多是傷離別,遙盼處、斷云疊。 夜露秋高易水寒,玉欄空零葉。 冷煙郁霧愁眉睫,孽海風流夢蝴蝶。 十二巫山隔簾紗,...
    劉小地閱讀 362評論 30 69
  • 白衣掛影清霜淡 玉冠幽空紫月彌 銹劍藏鋒老驥寐 寒眸斷岳青筋旳
    茗香酒影閱讀 158評論 3 1
  • 觸發: 屬性觸發 A 參數: ngUrl 后臺請求地址ngData 表單數據ngKey 主鍵,用于判斷為新增...
    歲月靜好?閱讀 200評論 0 0