Android面試常客--四大組件之Activity

Activity是在面試過程中經(jīng)常會被問到的四大組件之一窥摄,比如它的生命周期镶奉、啟動模式等等,在這里將詳細(xì)展開來講解崭放,不只是為了應(yīng)付面試哨苛,在平時的開發(fā)過程中,掌握這些知識也是很重要的币砂。

Q:Activity的生命周期建峭?
A:相信很多人都在網(wǎng)上看過這么一張圖片:


這里寫圖片描述
這里寫圖片描述

很多面試官會問你Activity的生命周期有哪些?
這個問題就很好回答了决摧,照著這個圖片依次說出來就好了亿蒸。

Q:當(dāng)dialog彈出來的時候,Activity執(zhí)行了哪些生命周期的方法掌桩,當(dāng)dialog消息的時候边锁,又執(zhí)行了哪些方法?
A:如果是單純是創(chuàng)建的dialog波岛,Activity并不會執(zhí)行生命周期的方法茅坛,但是如果是跳轉(zhuǎn)到一個不是全屏的Activity的話,當(dāng)然就是按照正常的生命周期來執(zhí)行了则拷,即onPasue()->onStop()贡蓖。

Q:設(shè)備橫豎屏切換的時候,Activity的生命周期是如何變化的煌茬?
A:不設(shè)置Activity的android:configChanges時摩梧,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次宣旱,切豎屏?xí)r會執(zhí)行兩次仅父;
設(shè)置Activity的android:configChanges="orientation"時,切屏還是會重新調(diào)用各個生命周期浑吟,切橫笙纤、豎屏?xí)r只會執(zhí)行一次;
設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時组力,切屏不會重新調(diào)用各個生命周期省容,只會執(zhí)行onConfigurationChanged方法;
tips:還有一點燎字,非常重要腥椒,一個Android的變更細(xì)節(jié)阿宅!
當(dāng)API >12時,需要加入screenSize屬性笼蛛,否則屏幕切換時即使你設(shè)置了orientation系統(tǒng)也會重建Activity洒放!
橫豎屏切換生命周期的執(zhí)行

Q:Activity的啟動模式有哪些?各有怎樣的作用滨砍?
A:
Activity一共有四種launchMode:standard往湿、singleTop、singleTask惋戏、singleInstance领追。
1.standard 模式是默認(rèn)的啟動模式,不用為配置android:launchMode屬性即可响逢。standard啟動模式绒窑,不管有沒有已存在的實例,都生成新的實例舔亭。
2.singleTop 我們在上面的基礎(chǔ)上為指定屬些膨,android:launchMode="singleTop",系統(tǒng)就會按照singleTop啟動模式處理跳轉(zhuǎn)行為分歇。跳轉(zhuǎn)時系統(tǒng)會先在棧結(jié)構(gòu)中尋找是否有一個Activity實例正位于棧頂傀蓉,如果有則不再生成新的欧漱,而是直接使用职抡。如果系統(tǒng)發(fā)現(xiàn)存在有Activity實例,但不是位于棧頂,重新生成一個實例误甚。 這就是singleTop啟動模式缚甩,如果發(fā)現(xiàn)有對應(yīng)的Activity實例正位于棧頂,則重復(fù)利用窑邦,不再生成新的實例擅威。
3.singleTask 如果發(fā)現(xiàn)有對應(yīng)的Activity實例,則使此Activity實例之上的其他Activity實例統(tǒng)統(tǒng)出棧冈钦,使此Activity實例成為棧頂對象郊丛,顯示到幕前。
4.singleInstance 這種啟動模式比較特殊瞧筛,因為它會啟用一個新的棧結(jié)構(gòu)厉熟,將Acitvity放置于這個新的棧結(jié)構(gòu)中,并保證不再有其他Activity實例進(jìn)入较幌。

Q:如何快速啟動一個Activity揍瑟?
A:這個問題其實也是比較簡單的,就是不要在Activity的onCreate方法中執(zhí)行過多繁重的操作乍炉,并且在onPasue方法中同樣不能做過多的耗時操作绢片。

Q:Activity的啟動流程
A:注意滤馍!這里并不是要回答Activity的生命周期!
這里可以參考:app的啟動
類似于app啟動如何創(chuàng)建并進(jìn)入MainActivity的底循。

Q:Activity異常退出該如何處理巢株?
A:
Activity異常退出的時候 --> onPause() --> onSaveInstanceState() --> onStop() --> onDestory(),需要注意的是onSaveInstanceState() 方法與onPause并沒有嚴(yán)格的先后關(guān)系此叠,有可能在onPause之前纯续,也有可能在其后面調(diào)用,但會在onStop()方法之前調(diào)用灭袁;
異常退出后又重新啟動該Activity --> onCreate() --> onStart() --> onRestoreInstanceState() --> onResume()猬错;
搞懂這個生命周期的執(zhí)行后就可以回答了,首先要知道面試官的意思茸歧,是要重新啟動并恢復(fù)這個Activity還是說直接退出整個app倦炒,如果要恢復(fù)則要在onSaveInstanceState()中進(jìn)行保存數(shù)據(jù)并在onRestoreInstanceState()中進(jìn)行恢復(fù),如果是要退出app的話就要捕獲全局的異常信息软瞎,并退出app逢唤。
當(dāng)然我建議是使用UncaughtExceotionHandler來捕獲全局異常進(jìn)行退出app的操作,這樣會減少之前崩潰所造成的后遺癥涤浇!

Q:Activity的onNewInstent()方法什么時候會執(zhí)行鳖藕?
A:這個是啟動模式中的了,當(dāng)此Activity的實例已經(jīng)存在只锭,并且此時的啟動模式為SingleTask和SingleInstance著恩,另外當(dāng)這個實例位于棧頂且啟動模式為SingleTop時也會觸發(fā)onNewInstent()。

Q:鎖定屏與解鎖屏幕蜻展,Activity如何執(zhí)行生命周期的喉誊?
A:只會調(diào)用onPause(),而不會調(diào)用onStop方法纵顾,開屏后則調(diào)用onResume()调缨。

Q:如何修改 Activity 進(jìn)入和退出動畫厚满?
A:
可 以 通 過 兩 種 方 式 唱蒸, 一 是 通 過 定 義 Activity 的 主 題 呈野, 二 是 通 過 覆 寫 Activity 的overridePendingTransition 方法。
通過設(shè)置主題樣式在 styles.xml 中編輯如下代碼:
添加 themes.xml 文件:
在 AndroidManifest.xml 中給指定的 Activity 指定 theme汉额。
覆寫 overridePendingTransition 方法:
overridePendingTransition(R.anim.fade, R.anim.hold);

Q:Activity間通過Intent傳遞數(shù)據(jù)大小有沒有限制曹仗?
A:Intent在傳遞數(shù)據(jù)時是有大小限制的,這里官方并未詳細(xì)說明闷愤,不過通過實驗的方法可以測出數(shù)據(jù)應(yīng)該被限制在1MB之內(nèi)(1024KB)整葡,筆者采用的是傳遞Bitmap的方法,發(fā)現(xiàn)當(dāng)圖片大小超過1024(準(zhǔn)確地說是1020左右)的時候讥脐,程序就會出現(xiàn)閃退遭居、停止運行等異常(不同的手機(jī)反應(yīng)不同)啼器,因此可以判斷Intent的傳輸容量在1MB之內(nèi)。

以上是個人的拙見俱萍,會不斷更新6丝恰!

To Be Continued...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枪蘑,一起剝皮案震驚了整個濱河市损谦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岳颇,老刑警劉巖照捡,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異话侧,居然都是意外死亡栗精,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門瞻鹏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悲立,“玉大人,你說我怎么就攤上這事新博⌒较Γ” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵赫悄,是天一觀的道長原献。 經(jīng)常有香客問我,道長涩蜘,這世上最難降的妖魔是什么嚼贡? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任熏纯,我火速辦了婚禮同诫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘樟澜。我一直安慰自己误窖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布秩贰。 她就那樣靜靜地躺著霹俺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毒费。 梳的紋絲不亂的頭發(fā)上丙唧,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音觅玻,去河邊找鬼想际。 笑死培漏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胡本。 我是一名探鬼主播牌柄,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼侧甫!你這毒婦竟也來了珊佣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤披粟,失蹤者是張志新(化名)和其女友劉穎咒锻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體守屉,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡虫碉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胸梆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敦捧。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碰镜,靈堂內(nèi)的尸體忽然破棺而出兢卵,到底是詐尸還是另有隱情,我是刑警寧澤绪颖,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布秽荤,位于F島的核電站,受9級特大地震影響柠横,放射性物質(zhì)發(fā)生泄漏窃款。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一牍氛、第九天 我趴在偏房一處隱蔽的房頂上張望晨继。 院中可真熱鬧,春花似錦搬俊、人聲如沸紊扬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽餐屎。三九已至,卻和暖如春玩祟,著一層夾襖步出監(jiān)牢的瞬間腹缩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留藏鹊,地道東北人胜臊。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像伙判,于是被迫代替她去往敵國和親象对。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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

  • 關(guān)于為什么要寫屬于自己的博客宴抚,我在前一篇文章中也提到了勒魔。主要是歸納自己這一個時期所學(xué)到的知識,幫助自己更好的理解菇曲,...
    Kevin_Jern閱讀 897評論 0 9
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/c2c2ee4eb48a 1. 簡介 本篇不針對于...
    王三的貓阿德閱讀 2,212評論 2 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評論 25 707
  • 文/大劉的自由時光 專注力常潮,又稱注意力弟胀,指一個人專心于某一事物、或活動時的心理狀態(tài)喊式。人的注意力孵户,受多方面因素的影響...
    大劉的英語世界閱讀 774評論 6 4
  • 我試著一遍又一遍調(diào)節(jié)自己的情緒。 往往一次考砸的成績岔留,或在意的人一個不經(jīng)易的眼神夏哭,又或者一句無意義的言語,都能輕易...
    騎士的沉思閱讀 155評論 0 0