中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

一道經(jīng)典的Android面試題

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

摘要

今天,給各位分享一個(gè)很有意思,而且非常經(jīng)典的Android面試題。

試題引入

題目:原Activity啟動(dòng)一個(gè)新Activity,然后關(guān)閉這個(gè)新Activity回到原Activty,在這個(gè)過程中這兩個(gè)Activity的生命周期經(jīng)歷了怎樣的變化?

很多面試者給出了這樣的答案:

activity_error.png

答案真的如此嗎?

╮( ̄▽  ̄)╭ 相信一些有經(jīng)驗(yàn)的老司機(jī)們已經(jīng)開始笑了~

其實(shí),這是一個(gè)很簡(jiǎn)單的問題,打印一下Log日志就知道結(jié)果了。

接下來(lái),Blogger給各位實(shí)驗(yàn)下,但不再貼代碼了,直接把Log日志截出來(lái)就OK了。

注:額外添加onRestoreInstanceState、onSaveInstanceState等方法完善了一下Activity生命周期的調(diào)用過程。

......
/* 啟動(dòng) NewActivity */
com.sina.wangnan7.originactivity E/TAG: onPause(OriginActivity)
com.sina.wangnan7.originactivity E/TAG: onCreate(NewActivity)
com.sina.wangnan7.originactivity E/TAG: onStart(NewActivity)
com.sina.wangnan7.originactivity E/TAG: onResume(NewActivity)
com.sina.wangnan7.originactivity E/TAG: onSaveInstanceState(OriginActivity)
com.sina.wangnan7.originactivity E/TAG: onStop(OriginActivity)

/* 關(guān)閉 NewActivity */
com.sina.wangnan7.originactivity E/TAG: onPause(NewActivity)
com.sina.wangnan7.originactivity E/TAG: onRestart(OriginActivity)
com.sina.wangnan7.originactivity E/TAG: onStart(OriginActivity)
com.sina.wangnan7.originactivity E/TAG: onResume(OriginActivity)
com.sina.wangnan7.originactivity E/TAG: onStop(NewActivity)
com.sina.wangnan7.originactivity E/TAG: onDestroy(NewActivity)
......

開始分析

  • 在啟動(dòng)NewActivity的時(shí)候 ,OriginActivity執(zhí)行完onPause方法就停住了,直到NewActivity創(chuàng)建并執(zhí)行完onResume方法后才繼續(xù)向下執(zhí)行,然后一直執(zhí)行完onStop才停下。
  • 在關(guān)閉NewActivity的時(shí)候 ,NewActivity執(zhí)行完onPause方法也停住了,直到OriginActivity重啟并執(zhí)行完onResume方法后才繼續(xù)向下執(zhí)行,然后一直執(zhí)行完onDestroy方法變成被銷毀的狀態(tài)。

What?Why?...(⊙o⊙)

驚訝之后我們可以靜靜的想一下『Google為什么要這樣設(shè)計(jì)?』

其實(shí),這是對(duì)『用戶體驗(yàn)』的一種優(yōu)化,在啟動(dòng)一個(gè)新活動(dòng)時(shí),我們應(yīng)當(dāng)以最快的速度響應(yīng)新活動(dòng)并將界面呈現(xiàn)給用戶,而不是等到當(dāng)前的活動(dòng)完全停止后再去啟動(dòng)新活動(dòng)。同樣,在回退到上一個(gè)活動(dòng)時(shí),我們也應(yīng)當(dāng)以最快的速度去呈現(xiàn)上一個(gè)活動(dòng)的界面,而不是等到當(dāng)前活動(dòng)被完全銷毀后才去重啟之前的活動(dòng)。

分析之后,我們還能提煉出一條『編程經(jīng)驗(yàn)』:

應(yīng)盡量避免在onPause方法中做一些耗時(shí)操作(比如數(shù)據(jù)庫(kù)操作),以免影響『新活動(dòng)的啟動(dòng)』或『舊活動(dòng)的重啟』。

答案總結(jié)

為了讓答案更全面,Blogger接下來(lái)會(huì)以三種情況進(jìn)行總結(jié)。

  • 啟動(dòng)一個(gè)正常的NewActivity(完全遮擋OriginActivity),之后回退到正常狀態(tài)的OriginActivity。

activity_normal1.png

  • 啟動(dòng)一個(gè)正常的NewActivity(完全遮擋OriginActivity),之后回退到異常狀態(tài)的OriginActivity(例如:可用內(nèi)存不足,活動(dòng)被系統(tǒng)回收了)。

activity_normal2.png

  • 啟動(dòng)一個(gè)對(duì)話框主題的NewActivity(部分遮擋OriginActivity),之后回退到正常狀態(tài)的OriginActivity。

activity_normal3.png

至此,我們的答案已經(jīng)總結(jié)完了,可能你還會(huì)疑惑有沒有『?jiǎn)?dòng)一個(gè)對(duì)話框主題的NewActivity(部分遮擋OriginActivity),之后回退到異常狀態(tài)的OriginActivity』這種情況。我只能說(shuō)幾乎沒有, 因?yàn)锳ndroid系統(tǒng)一般不會(huì)去回收一個(gè)在屏幕上還可見的Activity,那樣會(huì)造成非常差的『用戶體驗(yàn)』 ,如果你真遇到這種情況,我只能說(shuō):親~,趕緊換手機(jī)吧!O(∩_∩)O~

 

來(lái)自:http://www.jianshu.com/p/422c167020eb

 

標(biāo)簽: Google 代碼 數(shù)據(jù)庫(kù)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:阿里面試回來(lái),想和Java程序員談一談

下一篇:iOS開發(fā)總結(jié)-Xcode常見錯(cuò)誤