Android面試一天一題(10 Day)

有些東西,大家天天都能看到,但并不一定了解和在意它。在Android開發中,加載資源,啟動一個新的Activity,獲取系統服務,獲取數據庫路徑,創建一個View等都會使用到Context。Context就像一個長著大眾臉的同學,你天天和它在一起上課,但卻說不出它是誰。

面試題:如何理解Android中的Context,它有什么用?

官方文檔對于Context的解釋:

Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

中文翻譯“Context”為“上下文,背景,環境,語境”,有點抽象。對照上面的英文,也很容易理解它的意思:Context提供了一個應用的運行環境,通過這個上下文應用才可以訪問資源,才能完成和其他組件、服務的交互。它就是一個調用者和具體實現的橋接。

再看看這個圖,可以直觀的了解Context相關類的繼承關系:


圖片來自網絡

具體的實現,大家可以看一看ContextImpl這個類的源碼,理一下它和LoadApk的關系,大家就會很容易明白Context是如何處理資源的。

注意:上圖中的mPackageInfo是一個LoadApk對像,這個LoadApk是一個hide類型的類,所以你在SDK中是找不到它的。

但是,面對天天見的“大眾臉同學”Context,很多人更想知道,理解它有什么實際的意義。做應用開發,我們只要會使用它不就行了嗎?

我先問一個簡單的問題:

Application(或者Service)和Activity都可以調用Context的startActivity方法,那么在這兩個地方調用startActivity有區別嗎?

如果你曾經遇到過,就會知道在Application(或者Service)需要給Intent設置Intent.FLAG_ACTIVITY_NEW_TASK才能正常啟動Activity,這就會引出Activity的Task棧問題,以后再做分析。

理解Context,對于我經歷的項目來說,最有用的就是對于插件框架的開發了。如果有面試官問你:

Context的實例是什么時候創建的?一個應用里面會有幾個Context的實例?

對于一般的應用來說,你會覺得這兩個問題很無聊。但如果你需要做插件開發,上面的問題就變成是很關鍵的問題了。你的插件框架會是一個小型的Android Framework層,你當然得自己處理插件的Application和Activity創建,那么你肯定要解決好這兩個問題。詳情可以查看ActivityThread這個類的源碼。

也就是說,如果我要招一個做插件開發的人,我肯定要了解一下他對這些問題的看法?;蛘咭粋€人的簡歷上說他對Android Framework層很精通,也可以拿這些問題檢測一下。

小結

有網友問“面試官是怎么考慮求職者的經驗、學歷、編程水平”這些方面的,其實這個問題不能脫離實際的公司和項目來回答。我只能說幾個場景,有些公司有人才培養計劃項目也不緊張,那么他們在招人時是以培養和貯備為目的,會更重視面試者的理解和學習能力。但如何一家公司急切需要人進來解決問題,他們就會更在乎你的項目經驗了,最好是直接招以前就做過類似項目的。如果一家公司只是需要碼農來搬代碼,那么只要不是太差的,他們會更看重性價比。

所以有公司關注這些對Context或Framework方面的理解的面式題,一是他們應用可能遇到了一些問題,需要一些對機制比較了解的開發來解決;二是想通過這類問題,考察面試者是否真如簡歷上般資深,因為他們相信做多了項目的人,很容易遇到機制方面的問題(如Dex的65535方法數限制)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,618評論 25 708
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,465評論 2 45
  • 廣州開始唱“空城計” Todywu2017-1-24 這些年在廣州過年,從十年前開始慢慢變化,到如今十個年頭過去,...
    todywu閱讀 775評論 0 51
  • 從昨天糾結到今天早上 終于下了決定買了武漢的票 獨自一人 匆忙的訂票匆忙的趕車..這一次沒有做任何的路線攻略 就想...
    怪癖有點多閱讀 266評論 0 1
  • 2016.09.18 今天休了一天假,和喵一起去公園玩兒。 準備幼兒園安排的認識花和樹葉的小簡報。 一出門,路上就...
    摹喵居士閱讀 114評論 0 0