1. 程式人生 > >Android面試一天一題(10 Day)

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方法數限制)。

相關推薦

Android面試天一10 Day

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

Android面試天一15 Day:ContentProvider

有一次HR給我了一份簡歷,說是一個資深的工程師,比較特別的是翻譯過一本《Andorid XXXX》的書,基本涵蓋了Android開發的要點,而且還是有深度的。正好我看過此書的一些章節,面試了一下之後,這個面試者比較顯著的特點就是對自己翻譯過的章節的知識點也不太

Android面試天一14 Day:SharedPreferences

如果說程式可以簡單理解成“指令和資料的集合”,那麼你在任何平臺上程式設計都難以離開資料儲存,在Android平臺上自然也不會例外。說到資料的儲存,對於Key-Value對應的資料存取,Android提供SharedPreferences的方式可以進行方便的操作。

Android面試天一16 Day: 執行緒同步

最近領導讓我在外掛框架上加上一個介面,在宿主應用中可以呼叫所有的外掛去清除自己的快取資料,當完成所有外掛的清除任務後再執行下一步操作。領導就是需求嘛,領導改變注意那是再正常不過的事了,但是不是領導的需求人員有可能變多了會有人身危險。我平時和同事吹牛時,常和他們說

Android面試天一吹牛

這兩天和領導產生了一些誤會,領導給了我很多Android開發讓我面試,本意是讓我招大哥,我卻按招小弟的標準來面試的,結果通過的人完全無法達到第二次篩選的標準。不知大家有沒有發現,在國內對於程式設計師或開發工程師嚴重缺乏評級標準,往往是按工作年限評級的,一兩年的叫

Android面試天一2優雅地介紹自己的專案

所謂鉤子,指的是引誘面試官問出我們事先準備好的問題。為什麼這麼做?每場面試的具體時間一般都是穩定在一個小範圍內的,面試官所問的問題如果是我們準備過的,那麼我們就可以輕鬆地回答,不但回答的質量高而且時間久,這樣一來,暴露缺陷的機會就會大大減少。那麼怎麼埋鉤子呢?以我的一次面試為例,當我介紹主介面側邊欄的實現時,

資料結構上機10.24

10.24號週三的上機題,先別急,原始碼在後面呢!!! 首先附上三張圖,是關於什麼是二叉樹的先序遍歷,中序遍歷,後序遍歷。 (1)先序遍歷 按照“根節點,左支,右支”的順序遍歷,如圖: (2)中序遍歷 按照“左支,根節點,右支”的順序遍歷,如圖: (2)後序遍歷 按

Android面試集錦之Activity知識整理

面試集錦是參考了慕課網BAT某大神的視訊。 本文分為四個部分: 1.Activity生命週期 2.Activity任務棧 3.Activity啟動模式 4.scheme跳轉協議 一、Activity的生命週期 什麼是Activity? android與使用者進行互動的時候,

Android面試集錦之Service知識整理

本文主要講解兩個部分: 一、service的應用場景,以及和Thread的區別 二、開啟service的兩種方式以及區別 第一部分又可以分為: Service基礎: 1.Service是什麼? Service是一種可以在後臺執行長時間執行操作而沒有使用者介面的應用元件。 可

Android面試集錦之Fragment知識整理

一、Fragment為什麼被稱為第五大元件 使用頻率高,ui切換效果好,更節省記憶體,因為其有自己的生命週期,所以也算不到四大元件裡取;fragment必須依附於activity存在。 二、Fragment載入到activity中的兩個方式 靜態載入,動態載入,(太基礎了不說了) 三

java面試每日十

1、面向物件的特徵有哪些方面? 答:抽象、封裝、繼承和多型。 抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一

Python面試3小

一、Python中賦值,淺拷貝和深拷貝的區別? 參考部落格:https://www.cnblogs.com/xueli/p/4952063.html 1、賦值 在python中,物件賦值實際上是物件的引用。當建立一個物件,然後把它賦給另一個變數的時候,python並沒有拷貝這個物件,而只是拷

Android面試基礎知識總結

狀態:未完成 Android面試基礎知識總結。 Activity 生命週期 啟動Activity:onCreate->onStart->onResume鎖屏或被其它Activity覆蓋:onPause->onStop解鎖或由被覆蓋狀態再回到前臺:onRes

python天一(1)

使用 lena 這一 年月日 pfile temp 當前 list name #有一個文件,文件名為output_1981.10.21.txt 。 # 下面使用Python: 讀取文件名中的日期時間信息,並找出這一天是周幾。 # 將文件改名為output_YYYY-MM-

代碼10— 二叉搜索樹

AR treenode return AS item 百度 特征 pre ref 1、98. 驗證二叉搜索樹 給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。 一個二叉搜索樹具有如下特征: 節點的左子樹只包含小於當前節點的數。 節點的右子樹只包含大於當前節點的數。 所有

java開發師筆試面試每日122

無法 其他 二叉 graph tile executor 包裝 存在 try 1.Volatile和Synchronized不同點 (1)、volatile只能作用於變量,使用範圍較小。synchronized可以用在變量、方法、類、同步代碼塊等,使用範圍比較廣。 (2)

《Python程式設計從入門到實踐》第10章檔案和異常動手試試答案附程式碼

目錄 10-3 訪客 10-4 訪客名單 10-6 加法運算 10-7 加法計算器 10-8 貓和狗 10-9 沉默的貓和狗 10-3 訪客 #!/usr/bin/env python # -*- coding:utf-8 -*- user = input

演算法十八:搜狗19年校招程式設計——找區間

注:筆試時並沒有AC,線下修改後可以輸出示例結果。 問題:從一個序列中找出所有包含全部數字的最小索引區間,若有多個則按出現的順序輸出。 輸入輸出示例: 輸入:1 1 3 4 6 6 5 1 1 3 3 輸出:[2,7] [3,8] [4,9] 分析:先用一個list

java面試每日十

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 答:switch可以作用於icsb(i see sb)上,即int、char、short、byte和他們的包裝類;不可作用於fdlb(伏地撈逼)上,即float、 dou

java面試每日十

31、介面是否可繼承(extends)介面?抽象類是否可實現(implements)介面?抽象類是否可繼承具體類(concrete class)? 答:介面可以繼承一個或多個介面,抽象類可以繼承一個類