Android面試一天一題(3 Day)

面試題: 怎么理解Activity的生命周期妖枚?

這是一道幾乎必問的Android面試題廷臼,當(dāng)聽到這題時(shí)大家的神經(jīng)都會(huì)麻木,你問我背绝页。說實(shí)話荠商,如果你問我怎么理解,我也很難回答续誉,因?yàn)檫@個(gè)問題太寬泛了结啼,答什么都可以又答什么都難答好。有一次電話面試問了一個(gè)人屈芜,對(duì)方直接說不要問這種在網(wǎng)上到處都能看到的題郊愧,他只要上網(wǎng)一查就會(huì)。好吧井佑,我脾氣好属铁,就接著問:
“那問什么題呢?”
“邏輯的躬翁,算法的焦蘑,業(yè)務(wù)什么的,就是純JAVA代碼的盒发±觯”
“那么熟悉什么算法呢?”
“宁舰。拼卵。÷瑁”(沒答上)

但Activity的生命周期又至關(guān)重要腋腮,不問好像又對(duì)不起彼此。根據(jù)得到的反饋我后來稍稍改變了一下提問方式壤蚜,不問怎么理解即寡,而是給幾個(gè)場(chǎng)景問怎么使用回調(diào)或回調(diào)的順序(或要注意什么),從側(cè)面看是否真正理解了袜刷。

下面還是先過一下官網(wǎng)上的Activity生命周期圖聪富,注意幾個(gè)框線其實(shí)代表又可以細(xì)分為不同的周期。


如果一個(gè)Activity在用戶可見時(shí)才處理某個(gè)廣播著蟹,不可見時(shí)注銷掉墩蔓,那么應(yīng)該在哪兩個(gè)生命周期的回調(diào)方法去注冊(cè)和注銷BroadcastReceiver呢梢莽?

Activity 的可見生命周期發(fā)生在 onStart調(diào)用與 onStop調(diào)用之間。在這段時(shí)間钢拧,用戶可以在屏幕上看到 Activity 并與其交互。我們可以在 onStart中注冊(cè)一個(gè) BroadcastReceiver以監(jiān)控影響 UI 的變化炕横,并在用戶無法再看到您顯示的內(nèi)容時(shí)在 onStop中將其取消注冊(cè)源内。

如果對(duì)方回答是在onResume和onPause方法中,那么你可以去引導(dǎo)對(duì)方看看在這兩個(gè)方法有什么不好的地方份殿。

如果有一些數(shù)據(jù)在Activity跳轉(zhuǎn)時(shí)(或者離開時(shí))要保存到數(shù)據(jù)庫(kù)膜钓,那么你認(rèn)為是在onPause好還是在onStop執(zhí)行這個(gè)操作好呢?

這題的要點(diǎn)和上一題是一樣的卿嘲,onPause較容易被觸發(fā)颂斜,所以我們?cè)谧鯞roadcastReceiver注銷時(shí)放在onStop要好些。onPause時(shí)Activity界面仍然是可見的拾枣,如彈出一個(gè)Dialog時(shí)沃疮。但在保存數(shù)據(jù)時(shí),放在onPause去做可以保證數(shù)據(jù)存儲(chǔ)的有效性梅肤,如果放在onStop去做司蔬,在某些情況下Activity走完onPause后有可能還沒順利走到onStop就被系統(tǒng)回收了。

但要注意在onPause中要非常迅速地執(zhí)行完所需操作姨蝴,不然會(huì)影響到下一個(gè)Activity的生命周期函數(shù)的調(diào)用俊啼。

簡(jiǎn)單說一下Activity A啟動(dòng)Activity B時(shí),兩個(gè)Activity生命周期的變化左医。

當(dāng)一個(gè) Activity 啟動(dòng)另一個(gè) Activity 時(shí)授帕,它們都會(huì)發(fā)生生命周期轉(zhuǎn)變。第一個(gè) Activity 暫停然后停止(但如果它在后臺(tái)仍然可見浮梢,則不會(huì)停止跛十,比如B是半透明的),系統(tǒng)會(huì)創(chuàng)建另一個(gè) Activity秕硝。 如果這兩個(gè)Activity 共用保存數(shù)據(jù)到文件或者數(shù)據(jù)庫(kù)偶器,必須要注意,在創(chuàng)建第二個(gè) Activity 前缝裤,第一個(gè) Activity 不會(huì)完全停止屏轰。更確切地說,啟動(dòng)第二個(gè) Activity 的過程與停止第一個(gè) Activity 的過程存在重疊憋飞。

以下是當(dāng) Activity A 啟動(dòng) Activity B 時(shí)一系列操作的發(fā)生順序:

Activity A 的 onPause方法執(zhí)行霎苗。
Activity B 的 onCreate、onStart和 onResume方法依次執(zhí)行榛做。
然后唁盏,如果 Activity A 在屏幕上不再可見内狸,則其 onStop方法執(zhí)行。

您可以利用這種可預(yù)測(cè)的生命周期回調(diào)順序管理從一個(gè) Activity 到另一個(gè) Activity 的信息轉(zhuǎn)變厘擂。 例如昆淡,如果您必須在第一個(gè) Activity 停止時(shí)向數(shù)據(jù)庫(kù)寫入數(shù)據(jù),以便下一個(gè) Activity 能夠讀取該數(shù)據(jù)刽严,則應(yīng)在 onPause而不是 onStop執(zhí)行期間向數(shù)據(jù)庫(kù)寫入數(shù)據(jù)昂灵。

小結(jié)

這幾個(gè)問題看似簡(jiǎn)單,其實(shí)還是很能問出面試者是否真正理解Activity生命周期的轉(zhuǎn)變舞萄。經(jīng)常有人會(huì)問眨补,知道這些有什么用?又不能提升編程能力倒脓?編程能力是一個(gè)很復(fù)雜的體系撑螺,不能光看有技術(shù)含量或者高大上的算法才叫有能力,和悟道一樣崎弃,我認(rèn)為認(rèn)識(shí)理清Android體系甘晤,順應(yīng)它的道(機(jī)制)開發(fā)應(yīng)用也是一種能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饲做,一起剝皮案震驚了整個(gè)濱河市安皱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艇炎,老刑警劉巖酌伊,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缀踪,居然都是意外死亡居砖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門驴娃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奏候,“玉大人,你說我怎么就攤上這事唇敞≌岵荩” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵疆柔,是天一觀的道長(zhǎng)咒精。 經(jīng)常有香客問我,道長(zhǎng)旷档,這世上最難降的妖魔是什么模叙? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮鞋屈,結(jié)果婚禮上范咨,老公的妹妹穿的比我還像新娘故觅。我一直安慰自己,他們只是感情好渠啊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布输吏。 她就那樣靜靜地躺著,像睡著了一般替蛉。 火紅的嫁衣襯著肌膚如雪贯溅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天灭返,我揣著相機(jī)與錄音盗迟,去河邊找鬼坤邪。 笑死熙含,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艇纺。 我是一名探鬼主播怎静,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼黔衡!你這毒婦竟也來了蚓聘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤盟劫,失蹤者是張志新(化名)和其女友劉穎夜牡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侣签,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塘装,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了影所。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹦肴。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖猴娩,靈堂內(nèi)的尸體忽然破棺而出阴幌,到底是詐尸還是另有隱情,我是刑警寧澤卷中,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布矛双,位于F島的核電站,受9級(jí)特大地震影響蟆豫,放射性物質(zhì)發(fā)生泄漏背零。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一无埃、第九天 我趴在偏房一處隱蔽的房頂上張望徙瓶。 院中可真熱鬧毛雇,春花似錦、人聲如沸侦镇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)壳繁。三九已至震捣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闹炉,已是汗流浹背蒿赢。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渣触,地道東北人羡棵。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗅钻,于是被迫代替她去往敵國(guó)和親皂冰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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