Android Activity

1更鲁、說(shuō)下Activity生命周期 ?

onCreate()

表示Activity正在被創(chuàng)建奇钞,常用來(lái)做些初始化動(dòng)作澡为,比如調(diào)用setContentView()用來(lái)加載布局資源,初始化Activity數(shù)據(jù)景埃。

onReStart()

表示Acitivity正在被重新啟動(dòng)媒至,一般情況下,Acitivity從不見到可見時(shí)谷徙,都會(huì)被調(diào)用拒啰。

onStart()

表示Acitivity正在被啟動(dòng),此時(shí)Activity可見但不可動(dòng)即不處于前臺(tái)完慧,無(wú)法進(jìn)行互動(dòng)谋旦。

onResume()

表示Activity獲取到焦點(diǎn),此時(shí)Activity不但可見并處于前臺(tái)屈尼,進(jìn)行互動(dòng)操作蛤织。這是它與onStart()的區(qū)別所在。

onPause()

表示Activity正在被正在停止鸿染,此時(shí)可做一些存儲(chǔ)數(shù)據(jù),停止動(dòng)畫的動(dòng)作乞巧。但不可太過(guò)耗時(shí)涨椒,因?yàn)檫@會(huì)影響到新Activity的顯示,因?yàn)樾碌腁ctivity必須在前者的onPause()完成之后才會(huì)執(zhí)行onResume()。

onStop()

表示Activity即將停止蚕冬,此處可以做些重量級(jí)的回收工作免猾,比如銷毀廣播接收器,關(guān)閉網(wǎng)絡(luò)等囤热,同樣的猎提,不能太過(guò)耗時(shí)

onDestory()

表示Activity即將被銷毀旁蔼,這是Activity最后一個(gè)回調(diào)锨苏,常用作回收工作,資源釋放等棺聊。

延伸:

從整個(gè)生命周期來(lái)看伞租,如果將之配對(duì)的話。

onCreate()與onDestory()為一對(duì)限佩,分別代表了Activity的創(chuàng)建與銷毀葵诈,并且有且只有一次調(diào)用

onStart()與onStop()為一對(duì)祟同,依據(jù)為是否可見作喘,兩個(gè)方法可被多次調(diào)用

onResume()與onPause()為一對(duì)晕城,依據(jù)為是否處于前臺(tái)泞坦,兩個(gè)方法也可被多次調(diào)用




2广辰、Activity A 啟動(dòng)另一個(gè)Activity B 會(huì)調(diào)用哪些方法暇矫?如果B是透明主題的又或則是個(gè)DialogActivity呢 ?

A onPause()→B onCreate()→onStart()→onResume()→A onStop()

如果B是透明主題择吊,或者為DialogActivity李根,A不會(huì)執(zhí)行最后的onStop()方法。


3几睛、說(shuō)下onSaveInstanceState()方法的作用 ? 何時(shí)會(huì)被調(diào)用房轿?

Activity在意外銷毀的狀況下(系統(tǒng)配置發(fā)生改變時(shí)導(dǎo)致Activity被殺死并重新創(chuàng)建、資源內(nèi)存不足導(dǎo)致低優(yōu)先級(jí)的Activity被殺死)所森,Activity會(huì)調(diào)用onSaveInstanceState()方法囱持,來(lái)保存Activity的狀態(tài),此方法執(zhí)行在onStop之前焕济,而與onPause方法沒(méi)有既定的時(shí)序關(guān)系纷妆。

當(dāng)Activity被重建后,Activity會(huì)調(diào)用onRestoreInstanceState()方法晴弃,并把在onSaveInstanceState()方法中保存的Bundle對(duì)象傳參給onRestoreInstanceState()和onCreate()掩幢,因此我們可以通過(guò)這兩個(gè)方法逊拍,來(lái)判斷該Activity是否被重建,而該方法是調(diào)用在onStart()之后际邻。

4芯丧、說(shuō)下 Activity的四種啟動(dòng)模式、應(yīng)用場(chǎng)景 世曾?

standard標(biāo)準(zhǔn)模式:每次啟動(dòng)一個(gè)Activity不管該Activity是否存在缨恒,都會(huì)重新創(chuàng)建一個(gè)新的Activity實(shí)例,而此模式創(chuàng)建的實(shí)例轮听,會(huì)默認(rèn)進(jìn)入啟動(dòng)它的Activity所處的任務(wù)棧中骗露。

singleTop棧頂復(fù)用模式:每次啟動(dòng)Activity,會(huì)先確認(rèn)該Activity是否處于棧頂位置蕊程。如果是椒袍,則不會(huì)重新創(chuàng)建新的Activity,同時(shí)會(huì)回調(diào)onNewIntent()方法藻茂。如果不是驹暑,則會(huì)重新去創(chuàng)建一個(gè)新的實(shí)例。

singleTask棧內(nèi)復(fù)用模式:每次啟動(dòng)Activity辨赐,會(huì)搜尋Activity是否處于某個(gè)棧中优俘,如果存在,則不會(huì)重新創(chuàng)建新的實(shí)例掀序,如果不存在呀邢,則會(huì)重新創(chuàng)建一個(gè)任務(wù)棧淮悼,并將Activity放入該棧內(nèi)。

singleInstance單實(shí)例模式:一種加強(qiáng)版的singleTask模式,具有此模式的Activity只能單獨(dú)地存在一個(gè)任務(wù)棧中濒翻,任務(wù)棧之中有且只有一個(gè)實(shí)例乍迄。


5泌霍、了解哪些Activity常用的標(biāo)記位Flags甲抖?

FLAG_ACTIVITY_NEW_TASK:對(duì)應(yīng)singleTask,其效果與在XML指定啟動(dòng)模式相同沾瓦。

FLAG_ACTIVITY_SINGLE_TOP:對(duì)應(yīng)singleTop满着,其效果與在XML指定啟動(dòng)模式相同。

FLAG_ACTIVITY_CLEAR_TOP:具有此標(biāo)記的Activity贯莺,當(dāng)它啟動(dòng)時(shí)风喇,會(huì)將其所在任務(wù)棧自身之上的Activity悉數(shù)移出棧,這個(gè)標(biāo)識(shí)一般會(huì)與singleTask模式一起出現(xiàn)缕探,在這種情況下魂莫,如果目標(biāo)Activity存在,則會(huì)回調(diào)onNewIntent()方法爹耗,如果是standard模式耙考,則會(huì)連同存在的當(dāng)前Activity一起移出棧頂秽誊,而后重新創(chuàng)建一個(gè)新的實(shí)例并放入棧中。

FLAG_ACTIVITY_EXCLUDE_FORM_RECENT:具有該標(biāo)記的Activity不會(huì)出現(xiàn)在歷史Activity列表中琳骡。


6、說(shuō)下 Activity跟window讼溺,view之間的關(guān)系楣号?

Activity在創(chuàng)建時(shí)會(huì)通過(guò)attach()方法初始化一個(gè)phoneWindow(繼承于Window),每一個(gè)Activity都包含有一個(gè)phoneWindow怒坯。

Activity可通過(guò)setContentView()實(shí)際上是通過(guò)getWindow().setContentView()將View設(shè)置到phoneWindow之上炫狱,而phoneWindow則是通過(guò)內(nèi)部的WindowManager的addView,removeView剔猿,updateViewLayout來(lái)管理View视译。實(shí)際上WindowManager相當(dāng)于接口,最終由WindowMangerImp來(lái)實(shí)現(xiàn)


7归敬、橫豎屏切換的Activity生命周期變化酷含?

不設(shè)置Activity的android:configChange=“orientation”時(shí),橫豎屏切換會(huì)摧毀當(dāng)前Activity汪茧,并重新加載調(diào)用各個(gè)周期椅亚。切橫屏?xí)r調(diào)用一次豎屏?xí)r調(diào)用兩次舱污。onPause()→onStop()→onDestory()→onCreate()→onStart()→onReSume()

如果設(shè)置了android:configChange="orentation"屬性時(shí)呀舔,

在android5.1即API23級(jí)以下時(shí)

Activity依舊會(huì)重新調(diào)用生命周期

在android9即API28級(jí)以下時(shí)

Activity不再需要調(diào)用各個(gè)生命周期,而是只會(huì)執(zhí)行扩灯,onConfigurationChange()方法

如果是android3.2即API13以上媚赖,還需要設(shè)置screenSize配置,因?yàn)?b>當(dāng)橫豎屏切換時(shí)珠插,該屬性也會(huì)發(fā)生變化惧磺,如果設(shè)置了該屬性,之后即便橫豎屏切換丧失,此配置變換Activity也不會(huì)再重新啟動(dòng)豺妓。


8、如何啟動(dòng)其他應(yīng)用的Activity布讹?

在保證有權(quán)限的情況下琳拭,一般通過(guò)隱式Intent去與目標(biāo)Activity的intent-Filter進(jìn)行匹配。

只有與目標(biāo)Activity的intent-Filter的action描验,category白嘁,data全部匹配成功,才能啟動(dòng)目標(biāo)Activity

以個(gè)Activity可以擁有多個(gè)intent-Filter膘流,所以發(fā)起intent只要匹配到其中一組絮缅,就能夠啟動(dòng)目標(biāo)Activity鲁沥。


9、Activity的啟動(dòng)過(guò)程耕魄?(重點(diǎn))

點(diǎn)擊App圖標(biāo)后通過(guò)startActivity調(diào)用到遠(yuǎn)程AMS調(diào)用中画恰,調(diào)用中AMS將新Activity以activityRecord的方式壓入Activity棧中,并通過(guò)遠(yuǎn)程Binder回調(diào)到原進(jìn)程吸奴,使其進(jìn)入pause狀態(tài) 允扇,原進(jìn)程再通過(guò)binder告知AMS我已pause

AMS再根據(jù)棧中的Activity的啟動(dòng)的intent中的flag標(biāo)簽中是否有new_task標(biāo)簽,來(lái)判斷是否要啟動(dòng)新的進(jìn)程则奥。啟動(dòng)新進(jìn)沖通過(guò)調(diào)用startProcessXXX的函數(shù)考润。

啟動(dòng)新進(jìn)程后,通過(guò)反射調(diào)用Activity的ActivityThread的main函數(shù)读处,main函數(shù)中調(diào)用looper.prepar和looper.loop啟動(dòng)消息隊(duì)列循環(huán)機(jī)制,最后遠(yuǎn)程告知AMS我啟動(dòng)了糊治。AMS再通過(guò)回調(diào)handleLauncherActivity加載Activity。在handlerLaucherActivity中通過(guò)反射調(diào)用Application的onCreate和Activity的onCreate以及通過(guò)handleResumeActivity中反射調(diào)用Activity的onResume罚舱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末井辜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子馆匿,更是在濱河造成了極大的恐慌抑胎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐北,死亡現(xiàn)場(chǎng)離奇詭異阿逃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赃蛛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門恃锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呕臂,你說(shuō)我怎么就攤上這事破托。” “怎么了歧蒋?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵土砂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谜洽,道長(zhǎng)萝映,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任阐虚,我火速辦了婚禮序臂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘实束。我一直安慰自己奥秆,他們只是感情好逊彭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著构订,像睡著了一般侮叮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悼瘾,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天签赃,我揣著相機(jī)與錄音,去河邊找鬼分尸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歹嘹,可吹牛的內(nèi)容都是我干的箩绍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尺上,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼材蛛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起怎抛,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卑吭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后马绝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豆赏,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年富稻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掷邦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椭赋,死狀恐怖抚岗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哪怔,我是刑警寧澤宣蔚,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站认境,受9級(jí)特大地震影響胚委,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜元暴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一篷扩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茉盏,春花似錦鉴未、人聲如沸枢冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淹真。三九已至,卻和暖如春连茧,著一層夾襖步出監(jiān)牢的瞬間核蘸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工啸驯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留客扎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓罚斗,卻偏偏與公主長(zhǎng)得像徙鱼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子针姿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • Activity 一袱吆、四種形態(tài) 運(yùn)行狀態(tài): 當(dāng) Activity 處于棧的頂層,可見距淫,并可與用戶進(jìn)行交互 onRe...
    任教主來(lái)也閱讀 1,647評(píng)論 1 10
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 705評(píng)論 0 4
  • Activity是一個(gè)應(yīng)用組件绞绒,用戶可與其提供的屏幕進(jìn)行交互,以執(zhí)行撥打電話榕暇、拍攝照片蓬衡、發(fā)送電子郵件或查看地圖等操...
    進(jìn)攻的螞蟻閱讀 1,154評(píng)論 0 0
  • 一、說(shuō)明 筆記主要是《Android開發(fā)藝術(shù)探索》的閱讀筆記和自己的理解彤枢,筆記中部分內(nèi)容引自《Android...
    lipyhui閱讀 428評(píng)論 0 2
  • 現(xiàn)在的微信朋友圈,已經(jīng)不是簡(jiǎn)單的朋友圈了盟猖,它充斥著的是廣告讨衣,是曬,你轉(zhuǎn)發(fā)的每一條鏈接或者是分享的每一個(gè)圖片都是在替...
    智慧經(jīng)紀(jì)人閱讀 1,193評(píng)論 0 0