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

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

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

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

摘要

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

試題引入

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

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

activity_error.png

答案真的如此嗎?

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

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

接下來,Blogger給各位實驗下,但不再貼代碼了,直接把Log日志截出來就OK了。

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

......
/* 啟動 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)
......

開始分析

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

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

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

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

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

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

答案總結(jié)

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

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

activity_normal1.png

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

activity_normal2.png

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

activity_normal3.png

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

 

來自:http://www.jianshu.com/p/422c167020eb

 

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

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

上一篇:阿里面試回來,想和Java程序員談一談

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