標籤:

如何在android面試中把Activity的生命周期說的很有逼格?

面試官一聽完,「卧槽,這小子有點6啊」。


自己不懂得不要隨便說,有人想讓你講ams。那你ams與activitythread通信是如何一步步孵化出activity的呢,activity又是怎麼出來的,那你又知道classloader的機制嗎,講了那麼多跨進城通信binder機制講得清楚嗎,再說說token和session。

面試的時候盡量說自己懂得,熟練的深入下去研究過的,不然一層層問你你根本答不出來。以前我覺得懂了一些view的繪製,不就是measure,layout,draw嘛。

但是細一點面試官就會問,那子view調用刷新那需要重新measure嗎,什麼時候需要什麼時候不需要呢,android通過什麼機制去區分的呢,一層層消息傳遞到contextimpl去做是出於什麼考慮呢,view的繪製又是如何和屏幕繪製保持同步的呢?等等

我覺得還是最好不要裝逼了,否則真的遇到高手,那就傻逼了,懂就懂,不懂咱學,下次再來面。


可以看一下 Android Framework 的工程師 Dianne Hackborn 的文章:

https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDU

對理解 Activity 的生命周期有幫助。


epoll


從framework開始說,包括activitymanager是如何管理app的生命周期的,跨進程通信又是怎樣的。包括app優先順序等…估計說完夠喝一壺的


先說說我對這種面試題的看法。

記得有一次 Romain Guy 有一次在 Google IO 說 它開發 Android 幾年了它都不弄不清楚 Activity 的生命周期。說 Activity 的生命周期太複雜了。

瞬間下面的人哈哈大笑。 我也曾經做過 2 年多的 Android 開發。 有時候就想這此個知識點是不是Android 界的 茴字的寫法呢?

現在能不看文檔寫下這麼些方法, onCreate , onViewCreated ,onStart,[onRestart ] onResume, ,onPause,onStop,onDestory, 然後並沒有什麼卵用。

其實這種回調方法 Activity 還有很多。這個時候我看了下文檔,公開的以 on 開始的回調方法有約 80 個之多(API 23)。如果這些方法都知道肯定是記憶高手了。然後並沒有什麼卵用。有多無聊才會去記這 80 個方法呢? 但是很多時候,就是好像一些面試者就是看你記不記得的樣子。

怎麼樣才算是有逼格的說法? 有自己的看法怎麼樣?

我覺得就是以 Android 的思維來思考。

1. 為什麼需要這些生命周期的回調?為什麼?為什麼?為什麼?少了這樣的回調有何不可呢?

2. 很多回調都要求子類調用Activity自身的實現,如果開發者沒有調用,Android 對這種情況是怎麼處理的呢?

3. 談談歷史,生命周期的回調方法是隨著 Android 本身進化而進化的。談談其 API 的進化跟系統的進化的關聯及為什麼。

4. 談談分類與其他組件的關係,這麼來的生命回調方法(我是指80個的範圍),有不同的功能分類的,需要以不同的功能分類來思考他們,Activity 相當於MVC 中 Controller,談談與 View 的關聯。談談與 與其他組件的關聯。

5. Android 本身設計時讓人感覺整個系統是基於 Activity然後以 Intent 為紐帶來組裝而成的。那談談 Activity 生命同期與系統其他應用的交互就很有必要的了。

6. Activity 的生命周期與 Fragment 的生命周期的關聯。其實後面我寫的應用,Activity 的作用大在減少了,基本都是基於Fragment 的。那 Fragment 的生命周期 反而顯得更重要了。

7. 要不對比一下 iOS 下UIViewController的生命周期。 然後你會發懷疑 Android 下會為什會這麼多的生命周期回調方法呢?


http://miketech.it/androidactivitylifecircle/ 我的博客上有比較詳細的解釋~題主可以看看~


想說得有逼格一些 onXXXX 這類的就別說了, 由底向上你可以討論一下 ioctl、epoll、binder、AMS。還有一些細節諸如:Loader 是如何保留實例的;(Phone)Window 與你在屏幕上看到的 『Activity』到底有什麼關係, 與 ViewRootImpl 又有什麼關係,它們都是什麼時候被創建的,什麼時候會被銷毀。

如果這些你有 50% 不懂的話,還是少打 dota 多老老實實看書讀代碼吧,別老想著裝逼了,牛逼不是靠臨時看幾個秘笈裝出來的,日積月累學會的才是真正值得炫耀的,假如這塊我確實不是特別熟,我肯定不會提太多,早晚露餡兒。


你讀完源碼還要來知乎問問題?你沒讀過源碼隨便一個細節都能問死你。

我只說一點,你想要有點對任何事物的真實看法,就不要嚼別人吞噬食物後的反芻物或者排泄物,自己去獲取第一手資料。


裝什麼逼呢,老老實實回答問題,從應用層生命周期每一步所起到的作用,延伸到底層如何產生這些生命周期的講清楚就行,重點放在生命周期底層實現比較能展示技術,畢竟read fucking code是有技術含量和有利於應用層更好開發的。


別裝逼了。別以為說出這個玩意麵試官就會覺得你6了。面試官多少年工作經驗,你多少工作經驗。能當面試官的人,技術水平在公司都是靠得住的。你進去了只可能給他當手下。

如果是部門經理這種職位,很可能就是開發總監來面試。

我當年校招第一輪面試裝了下逼,還好那面試官沒為難我。抽絲剝繭的問,只是在面試完之後說了句:「對東西有點研究是好事,但要研究夠」。

裝逼的次數多了,面試官能把你問的一句話都答不上來。


先說一下生命周期的幾個方法在什麼時候觸發,然後再扯activity的啟動過程,帶上ams、binder機制這些,再然後說明framework層是通過handler發送消息觸發activity生命周期方法,最後再帶上looper分發消息給handler時用到的epoll機制。包管6666666666


推薦你去看一篇分析activiti的文章,原文鏈接Cobub官網博客Activiti淺析 - Cobub


這裡提供一種思路,Activity LifeCycle 可以從這三方面來進行表述。

1. 是什麼?

https://developer.android.com/training/basics/activity-lifecycle/index.html

官方文檔足夠詳細了,和清楚地講解了每一個生命周期是怎麼回事,他們之間的調用關係是什麼?

2. 怎麼來的?( 自我推薦下 :) )

http://www.woaitqs.cc/android/2016/07/19/how-activity-lifecircle-work.html

這裡面主要涉及到 Binder 機制,涉及到 AMS。不但可以了解生命周期的實現,你也會驚喜地發現其實其他組件的生命周期,也是類似的方式實現的。

3. 怎麼用?

最後落地到怎麼用上面,會顯得有開發經驗,紙上得來終覺淺。要結合著實踐的開發經驗上講,比如不同 LaunchMode 下,生命周期的表現是不是一樣的?又或者橫豎屏過後,生命周期又發生了什麼?

--------------

當然這裡面涉及到的知識點特別的多,也沒有必要細緻地去了解,遇到問題時,能分析源碼得出解決方法即可。


ams如何管理這些activity生命周期的?從這個角度


牛逼有什麼用,自己如果不懂,說得再牛逼,面試官一問你也會露餡


OnCreate, OnStart, OnResume, OnPause, OnStop, OnDestroy如果都實現了的話,哪個函數是肯定會被調用的?


畫時序圖


推薦閱讀:

如何成為一名合格的 Android 開發工程師?
4個月寫了4萬行iOS代碼,算多還是少呢?
在Android開發的過程中,有哪些坑是值得你放在checklist中警示自己的?
Android studio的工程默認繼承AppcompatActivity類和Activity不同?
2016 年第一季度,Android 有什麼讓人興奮的新技術出現嗎?

TAG:Android開發 |