Android 四大組件之Activity 總結(jié)

Activity 是應(yīng)用用來(lái)和用戶交互的窗口劳较。
Activity 生命周期
生命周期
  • Acitivity本質(zhì)上有四種狀態(tài)
    1.運(yùn)行:activity處于前臺(tái)用戶可見,可操作鸿染。(即activity位于棧頂端)
    2.暫停:如果一個(gè)活動(dòng)被另一個(gè)非全屏的活動(dòng)所覆蓋(比如一個(gè)Dialog),那么該活動(dòng)就失去了焦點(diǎn),它將會(huì)暫停(但它仍然保留所有的狀態(tài)和成員信息庆寺,并且仍然是依附在WindowsManager上),在系統(tǒng)內(nèi)存積極缺乏的時(shí)候會(huì)將它殺死诉字。
    3.停止:如果一個(gè)活動(dòng)被另一個(gè)全屏活動(dòng)完全覆蓋懦尝,那么該活動(dòng)處于停止?fàn)顟B(tài)(狀態(tài)和成員信息會(huì)保留,但是Activity已經(jīng)不再依附于WindowManager了)壤圃。同時(shí)陵霉,在系統(tǒng)缺乏資源的時(shí)候會(huì)將它殺死(它會(huì)比暫停狀態(tài)的活動(dòng)先殺死)。
    4.重啟:如果一個(gè)活動(dòng)在處于停止或者暫停的狀態(tài)下伍绳,系統(tǒng)內(nèi)存缺乏時(shí)會(huì)將其結(jié)束(finish)或者殺死(kill)踊挠。這種非正常情況下,系統(tǒng)在殺死或者結(jié)束之前會(huì)調(diào)用onSaveInstance()方法來(lái)保存信息冲杀,同時(shí)效床,當(dāng)Activity被移動(dòng)到前臺(tái)時(shí)睹酌,重新啟動(dòng)該Activity并調(diào)用onRestoreInstance()方法加載保留的信息,以保持原有的狀態(tài)剩檀。
  • 生命周期

1.onCreate:與onDestroy配對(duì)憋沿,表示Activity正在被創(chuàng)建,這是生命周期的第一個(gè)方法沪猴。在這個(gè)方法中可以做一些初始化的工作(加載布局資源辐啄、初始化Activity所需要的數(shù)據(jù)等),耗時(shí)的工作在異步線程上完成字币。
2.onRestart:表示Activity正在重新啟動(dòng)则披。一般情況下,在當(dāng)前Activity從不可見重新變?yōu)榭梢姷臓顟B(tài)時(shí)onRestart就會(huì)被調(diào)用洗出。這種情形一般是由于用戶的行為所導(dǎo)致的士复,比如用戶按下Home鍵切換到桌面或者打開了一個(gè)新的Activity(這時(shí)當(dāng)前Activity會(huì)暫停,也就是onPause和onStop被執(zhí)行)翩活,接著用戶又回到了這個(gè)Activity阱洪,就會(huì)出現(xiàn)這種情況。
3.onStart:與onStop配對(duì)菠镇,表示Activity正在被啟動(dòng)冗荸,并且即將開始。但是這個(gè)時(shí)候要注意它與onResume的區(qū)別利耍。兩者都表示Activity可見蚌本,但是onStart時(shí)Activity還正在加載其他內(nèi)容,正在向我們展示隘梨,用戶還無(wú)法看到程癌,即無(wú)法交互。
4.onResume:與onPause配對(duì)轴猎,表示Activity已經(jīng)創(chuàng)建完成陕壹,并且可以開始活動(dòng)了宛瞄,這個(gè)時(shí)候用戶已經(jīng)可以看到界面了族操,并且即將與用戶交互(完成該周期之后便可以響應(yīng)用戶的交互事件了)停忿。
5.onPause:與onResume配對(duì),表示Activity正在暫停可婶,正常情況下沿癞,onStop接著就會(huì)被調(diào)用。在特殊情況下矛渴,如果這個(gè)時(shí)候用戶快速地再回到當(dāng)前的Activity,那么onResume會(huì)被調(diào)用(極端情況)抛寝。一般來(lái)說,在這個(gè)生命周期狀態(tài)下,可以做一些存儲(chǔ)數(shù)據(jù)盗舰、停止動(dòng)畫的工作晶府,但是不能太耗時(shí),如果是由于啟動(dòng)新的Activity而喚醒的該狀態(tài)钻趋,那會(huì)影響到新Activity的顯示川陆,原因是onPause必須執(zhí)行完,新的Activity的onResume才會(huì)執(zhí)行蛮位。
6.onStop:與onStart配對(duì)较沪,表示Activity即將停止,可以做一些稍微重量級(jí)的回收工作失仁,同樣也不能太耗時(shí)(可以比onPause稍微好一點(diǎn))尸曼。
7.onDestroy:與onCreate配對(duì),表示Activity即將被銷毀萄焦,這是Activity生命周期的最后一個(gè)回調(diào)控轿,我們可以做一些回收工作和最終的資源釋放(如Service、BroadReceiver拂封、Map等)茬射。

Activity 實(shí)際應(yīng)用
  • 正常情況下一個(gè)activity的生命周期
demo.com E/LOG: onCreate
demo.com E/LOG: onStart
demo.com E/LOG: onResume
demo.com E/LOG: onPause
demo.com E/LOG: onStop
demo.com E/LOG: onDestroy
  • 非正常情況下 activity 生命周期
  1. 橫豎屏切換
  • 默認(rèn)情況橫豎屏切換
demo.com E/LOG: onCreate
demo.com E/LOG: onStart
demo.com E/LOG: onResume
demo.com E/LOG: onPause
demo.com E/LOG: onSaveInstanceState
demo.com E/LOG: onStop
demo.com E/LOG: onDestroy
demo.com E/LOG: onCreate
demo.com E/LOG: onStart
demo.com E/LOG: onResume
  • AndroidManifest.xml中加入配置

android:configChanges="orientation|keyboardHidden" [api3.2之前]
android:configChanges="orientation|keyboardHidden|screenSize" [api3.2之后] 界面方向以及大小的改變不需要重建

橫豎屏切換的時(shí)候不會(huì)創(chuàng)建新的activityapi3.2但是會(huì)調(diào)用onConfigurationChanged()方法可在里面做一些適配或者修改:

切換橫屏調(diào)用onConfigurationChanged 一次
切換豎屏調(diào)用onConfigurationChanged 一次

06-28 17:12:34.370 12514-12514/demo.com E/LOG: onCreate
06-28 17:12:34.373 12514-12514/demo.com E/LOG: onStart
06-28 17:12:34.373 12514-12514/demo.com E/LOG: onResume
06-28 17:12:36.297 12514-12514/demo.com E/LOG: onConfigurationChanged
06-28 17:12:41.526 12514-12514/demo.com E/LOG: onConfigurationChanged
Activity 啟動(dòng)模式

具體介紹 來(lái)自Carson_Ho

  • 如下圖 ↓


    image

    通俗講解

  • 如下圖 ↓


    image

區(qū)別

  • 如下圖


    image
如何設(shè)置啟動(dòng)模式

通過設(shè)置ActivityManifest

<activity
android:launchMode="啟動(dòng)模式"
//屬性
//standard:標(biāo)準(zhǔn)模式
//singleTop:棧頂復(fù)用模式
//singleTask:棧內(nèi)復(fù)用模式
//singleInstance:?jiǎn)卫J?//如不設(shè)置,Activity的啟動(dòng)模式默認(rèn)為**標(biāo)準(zhǔn)模式(standard)**
</activity>

通過Intent設(shè)置標(biāo)志位

Intent inten = new Intent (ActivityA.this,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

標(biāo)記位屬性

標(biāo)記屬性 含義
FLAG_ACTIVITY_SINGLE_TOP 指定啟動(dòng)模式為棧頂復(fù)用模式(SingleTop)
FLAG_ACTIVITY_NEW_TASK 指定啟動(dòng)模式為棧內(nèi)復(fù)用模式(SingleTask)
FLAG_ACTIVITY_CLEAR_TOP 所有位于其上層的Activity都要移除冒签,SingleTask模式默認(rèn)具有此標(biāo)記效果
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有該標(biāo)記的Activity不會(huì)出現(xiàn)在歷史Activity的列表中在抛,即無(wú)法通過歷史列表回到該Activity上

兩種方式的區(qū)別

  • 優(yōu)先級(jí)
    Intent設(shè)置方式的優(yōu)先級(jí) > Manifest設(shè)置方式
  • 限定范圍不同
    Manifest設(shè)置方式無(wú)法設(shè)定 FLAG_ACTIVITY_CLEAR_TOP;Intent設(shè)置方式 無(wú)法設(shè)置單例模式(SingleInstance)
Activity之間通訊
  • activity之間通過intent來(lái)進(jìn)行通訊
// 在AActivity中啟動(dòng)BActivity 并傳遞參數(shù)parameter1 和parameter2 給BActivity
Intent intent = new Intent(AActivity.this, BActivity.class);
intent.putExtra("parameter1", parameter1);
intent.putExtra("parameter2", parameter2);
startActivity(intent);
// 在BActivity中獲取AActivity中傳遞過來(lái)的參數(shù)
parameter1= getIntent().getStringExtra("parameter1");
parameter2= getIntent().getStringExtra("parameter2");
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萧恕,一起剝皮案震驚了整個(gè)濱河市刚梭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌票唆,老刑警劉巖望浩,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惰说,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缘回,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門吆视,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人酥宴,你說我怎么就攤上這事啦吧。” “怎么了拙寡?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵授滓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)般堆,這世上最難降的妖魔是什么在孝? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮淮摔,結(jié)果婚禮上私沮,老公的妹妹穿的比我還像新娘。我一直安慰自己和橙,他們只是感情好仔燕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著魔招,像睡著了一般晰搀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上办斑,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天外恕,我揣著相機(jī)與錄音,去河邊找鬼俄周。 笑死吁讨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峦朗。 我是一名探鬼主播建丧,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼波势!你這毒婦竟也來(lái)了翎朱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尺铣,失蹤者是張志新(化名)和其女友劉穎拴曲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凛忿,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澈灼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了店溢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叁熔。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖床牧,靈堂內(nèi)的尸體忽然破棺而出荣回,到底是詐尸還是另有隱情,我是刑警寧澤戈咳,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布心软,位于F島的核電站壕吹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏删铃。R本人自食惡果不足惜耳贬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泳姐。 院中可真熱鬧效拭,春花似錦、人聲如沸胖秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阎肝。三九已至挤渔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間风题,已是汗流浹背判导。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛硅,地道東北人眼刃。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像摇肌,于是被迫代替她去往敵國(guó)和親擂红。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 【Android Activity】 什么是 Activity? 四大組件之一,通常一個(gè)用戶交互界面對(duì)應(yīng)一個(gè) ac...
    Rtia閱讀 3,805評(píng)論 3 18
  • Activity簡(jiǎn)介 Activity是Android一個(gè)非常重要的用戶接口(四大組件之一)围小,是可見的昵骤,主要是用戶...
    艾曼大山閱讀 486評(píng)論 0 3
  • Activity 是一個(gè)應(yīng)用組件,用戶可與其提供的屏幕進(jìn)行交互肯适,以執(zhí)行撥打電話变秦、拍攝照片、發(fā)送電子郵件或查看地圖等...
    岳小川閱讀 482評(píng)論 0 3
  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity框舔,Service服務(wù),...
    開子的私家地閱讀 1,416評(píng)論 0 5
  • 存正最近心情很激動(dòng)蹦玫。又要見面了,有兩年沒見了吧刘绣。怎么表現(xiàn)存正的激動(dòng)的期待呢樱溉,就是他現(xiàn)在每天刷牙都比平時(shí)刷的多,刷的...
    ZeiHa閱讀 224評(píng)論 1 2