[Android] 面試題總結(jié)-獵趣-Android部分

前言

昨天(很久之前 = =)哲鸳,很意外的接到了獵趣的電話,直奔主題就開始面試了盔憨,我都不知道我投過這家公司徙菠,后來才知道,是朋友推薦的郁岩。面試官人很好婿奔,問的問題分了 Java,Android 兩類问慎,從簡單到深入萍摊,一點一點來,事后如叼,我覺得這是很難得的經(jīng)歷冰木,打算記錄下來,以備后用。

Android 問題

  • Activity 生命周期踊沸,以及簡單分析一下歇终,從 A 跳轉(zhuǎn)到 B,在從 B(點擊虛擬 Back 鍵)回到 A 逼龟,Activity A评凝,B,分別執(zhí)行了哪些方法审轮?
  • 簡要描述一下 Activity 的啟動模式肥哎。
  • 你是怎么理解 Android 的 Android 異步消息處理機制,(如果基本回答出來了疾渣,會繼續(xù)問你,對于 Looper 的理解崖飘,以及榴捡,MessageQueue 是什么時候創(chuàng)建的?)
  • 說一說朱浴,Window吊圾,Activity,View 三者的關(guān)系翰蠢。
  • 說一下项乒,你知道的幾種常用動畫類型,及其本質(zhì)的區(qū)別梁沧。
  • 實現(xiàn) View 的滑動檀何,有哪幾種方法?(如果你回答出了廷支,ScrollTo()频鉴,和ScrollBy(),會問你這倆的區(qū)別恋拍,以及都繼承自什么垛孔?)

下面我一個一個整理資料,為自己做一個總結(jié)施敢。

1周荐, Activity 生命周期

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy();
還有一個 onRestart()僵娃;這個基本沒有什么問題概作,額外提一句 ** onNewIntent() ** 雖然不屬于生命周期,但是有的公司面試悯许,也會問到仆嗦。
接下來是,Activity A先壕,B瘩扼,分別執(zhí)行了哪些方法谆甜?順序如下:

  • 啟動 A : onCreate() —> onStart() —> onResume(), A 進入運行狀態(tài)集绰。
  • 跳轉(zhuǎn)至 B :
    1. A 先執(zhí)行:onPause()
    2. B 再執(zhí)行:onCreate() -> onStart() -> onResume()
    3. A 再執(zhí)行:onStop()
  • 從 B 返回 A:
    1. B 先執(zhí)行:onPause()
    2. A 再執(zhí)行:onRestart() -> onStart() -> onResume()
    3. B 再執(zhí)行:onStop() -> onDestroy()
2规辱,Activity 的 4 種啟動模式

android:launchMode="standard | singleTop | singleTask | singleInstance"
先簡單描述一下 Activity 任務(wù)棧:任務(wù)棧是一種后進先出的結(jié)構(gòu),每個 APP 默認(rèn)只有一個棧栽燕,以APP的包名來命名罕袋。

  • standard : 標(biāo)準(zhǔn)模式,每次啟動 Activity 都會創(chuàng)建一個新的實例碍岔,并且將其壓入任務(wù)棧棧頂浴讯,不管這個 Activity 是否已經(jīng)存在。每次 onCreate() -> onStart() -> onResume() 都會執(zhí)行蔼啦;
  • singleTop : 棧頂復(fù)用模式榆纽,跳轉(zhuǎn)前,會先檢查新的 Activity 是否已在棧頂捏肢,如果在奈籽,就不會創(chuàng)建新的實例,只會調(diào)用 onNewIntent() 方法鸵赫;反之衣屏,如果不在棧頂洞拨, 則與 standard 模式一樣膊爪;
  • singleTask:棧內(nèi)復(fù)用模式碱工,顧名思義争占,就是要保證棧內(nèi)只有一個實例存在键菱。跳轉(zhuǎn)前霎迫,會先檢查棧內(nèi)是否已存在該實例孤紧,若存在亿遂,則會將其上方的所有實例清除掉卖局,并調(diào)用 onNewIntent() 方法斧蜕,使其出現(xiàn)在棧頂;
  • singleInstance :和 singleTask 很像砚偶,也有單例的作用批销,不同的是,會單獨創(chuàng)建一個新的任務(wù)棧染坯,歸 singleInstance activity 獨有均芽。這種模式應(yīng)用場景非常少,比如 “ 呼叫來電界面 ” 和 “ QQ 等第三方登錄界面 ”单鹿。
3掀宋,異步消息處理機制

關(guān)于這個問題,我就不獻丑了,我也是仔細閱讀了 鴻洋 郭霖 大神的博客劲妙,才差不多懂了湃鹊,雙手奉上鏈接:

Android 異步消息處理機制 讓你深入理解 Looper、Handler镣奋、Message三者關(guān)系
Android異步消息處理機制完全解析币呵,帶你從源碼的角度徹底理解

在此之前,我一直認(rèn)為侨颈,Looper 就是一個 while(true) 的循環(huán)體余赢,真是尷尬 = =!
在這里總結(jié)一下哈垢,防止自己又忘了:
Looper 內(nèi)部有兩個重要的方法:prepare() 和 loop()妻柒;

  • prepare() :準(zhǔn)備,就緒的意思温赔,作用為蛤奢,保證保證一個線程中只有一個 Looper 實例;
  • Looper():構(gòu)造方法陶贼,創(chuàng)造了 MessageQueue(消息隊列);
  • loop():不斷從 MessageQueue 中去取消息待秃,交給消息的 target 屬性(即拜秧,Handler)的 dispatchMessage() 去處理。

另外章郁,面試官還問我枉氮,子線程中能不能創(chuàng)建 Handler,一臉懵逼 = =

// 這是官方的標(biāo)準(zhǔn)寫法
class LooperThread extends Thread {  
      public Handler mHandler;  
      public void run() {  
          Looper.prepare(); // 沒有這句話暖庄,會報錯聊替。
  
          mHandler = new Handler() {  
              public void handleMessage(Message msg) {  
                  // process incoming messages here  
              }  
          };  
  
          Looper.loop();  
      }  
  }
4, Window培廓,Activity惹悄,View

坦白說,這個是我從來沒有研究過的問題肩钠,被問到時泣港,第一反應(yīng)是懵逼 = =,但是也不能直接說不知道价匠,真尷尬当纱,瞎扯了一會兒,然后面試官說踩窖,回答錯了坡氯,我坦率地問了一句,“能否簡單給我講一下這個知識點嗎?我真的很想知道箫柳!”手形,沒想到面試官真的回答,我很驚訝滞时,對這個公司的印象分叁幢,一下子上升了好大一截 ^ ^
時間過去了快2個禮拜,我只隱約記得坪稽,說:Window 是 容器曼玩;View 是視圖,畫布窒百;而 Activity 可以看作是控制器黍判,將 View 和 Window 關(guān)聯(lián)在一起,這三者的關(guān)系有點像
MVC篙梢,你去讀一讀 setContentView() 的源碼顷帖,就知道了。
不得不說渤滞,我閱讀源碼的能力贬墩,很是很弱的 = =,于是乎妄呕,我借鑒了以下文章:

理清Activity陶舞、View及Window之間關(guān)系
Activity、View绪励、Window的理解

特別是后一篇肿孵,是我極偶然看到的(已經(jīng)忘記是怎么搜到的了),大家有興趣自己去看疏魏,我只簡單總結(jié)一下:

  1. Window:一個 App 中有多個 Window停做,大小可自定義,作為盛放
    View 的容器大莫;
  2. View:UI組件蛉腌;
  3. Avtivity:關(guān)聯(lián) Window 和 View 的存在,用于控制 Window 下的 View-Tree葵硕;
  4. 不知道這個形容是否準(zhǔn)確眉抬,但是容易理解和記憶吧 = =
    系統(tǒng) <====> Window <====> Activity <====> View
    國家 <====> 房地產(chǎn)商 <====> 物業(yè) <====> 居民
    ** 國家分配地皮給房地產(chǎn)商用以建造房屋,房地產(chǎn)商利用物業(yè)去管理居住在此的居民懈凹。 **
5蜀变,動畫

關(guān)于這個,我只是會用而已介评,強烈建議库北,仔細閱讀以下** 郭霖大神 **的文章爬舰,我陸陸續(xù)續(xù)看完了,也實踐過寒瓦,但是不經(jīng)常用情屹,就又忘記了 = =

Android屬性動畫完全解析(上),初識屬性動畫的基本用法
Android屬性動畫完全解析(中)杂腰,ValueAnimator和ObjectAnimator的高級用法
Android屬性動畫完全解析(下)垃你,Interpolator和ViewPropertyAnimator的用法

簡單回答,面試問題:
三種:逐幀動畫(frame-by-frame animation)喂很,補間動畫(tweened animation)惜颇,和屬性動畫(property animation)。
區(qū)別:補間動畫少辣,只是重新繪制了而已凌摄,其屬性并未改變;屬性動畫漓帅,則是直接改變了其屬性锨亏。

6,實現(xiàn) View 滑動的幾種方式(隨手指滑動)

隨手指滑動忙干,基本都是用到 onTouchEvent() 這個我就不多說了器予,我知道的有以下幾種方式:

  • layout(left, top, right, bottom)
  • offsetLeftAndRight(x)offsetTopAndBottom(y)捐迫,其實就是對 layout 做了一層封裝而已劣摇;
  • setLayoutParams(lp) 這個,在做 View 位置微調(diào)的時候用過弓乙;
  • scrollTo()scrollBy() 這個,稍微麻煩一點钧惧,我多說兩句:
    • 顧名思義暇韧,To 就是移動到某個坐標(biāo)點,By 不好直譯浓瞪,作用是懈玻,在原有位置在添加一個偏移量;
    • View.scrollTo() or View.scrollBy()乾颁,** 作用對象是涂乌,View 的內(nèi)容 **,如 TextView 移動的是文字英岭;
    • ViewGroup.scrollTo() or ViewGroup.scrollBy()湾盒,** 作用的對象是,所有子 View **诅妹;
  • 屬性動畫咯~ 個人感覺最好用罚勾,最容易~ 嘿嘿

** 以下是我所不知道的毅人,連聽都沒聽說過,真是孤陋寡聞啊 = = **

  • Scroller尖殃,通過 Scroller 類來實現(xiàn)一些平滑的動畫效果丈莺,可以設(shè)置動畫時間等;
  • ViewDragHelper送丰,經(jīng)典例子就是缔俄,側(cè)滑菜單;

哦器躏,忘記了說了俐载,scrollTo()scrollBy() 分別繼承自什么?面試官好壞邀桑,還挖坑 = =瞎疼,“ 分別 ”,明明都繼承自 View 類壁畸,哼~
再提一句贼急,scrollBy() 內(nèi)部調(diào)用了 scrollTo()

后記

這一篇拖得比較久捏萍,快兩個禮拜了太抓,真是抱歉,拖延癥犯了 = =
主要原因了令杈,我從西安去北京了~走敌,原因是什么,大家應(yīng)該猜到了逗噩,嘻嘻掉丽,沒錯,我收到 Offer 了异雁,整體來說捶障,全憑運氣吧,我總覺得是因為纲刀,在面試過程中项炼,我問面試官了一句,** “ 能否簡單給我講一下這個知識點嗎示绊?我真的很想知道锭部!” **,多么紅果果的求知欲面褐,哈哈~
說實話拌禾,真的是運氣使然,要感謝我的好基友盆耽,濤子~ 嘿嘿
明天就要正式去獵趣上班啦~ 跪求不要一日游~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹋砚,一起剝皮案震驚了整個濱河市扼菠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坝咐,老刑警劉巖循榆,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異墨坚,居然都是意外死亡秧饮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門泽篮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗尸,“玉大人,你說我怎么就攤上這事帽撑∑酶鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵亏拉,是天一觀的道長扣蜻。 經(jīng)常有香客問我,道長及塘,這世上最難降的妖魔是什么莽使? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮笙僚,結(jié)果婚禮上芳肌,老公的妹妹穿的比我還像新娘。我一直安慰自己肋层,他們只是感情好亿笤,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栋猖,像睡著了一般责嚷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掂铐,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音揍异,去河邊找鬼全陨。 笑死,一個胖子當(dāng)著我的面吹牛衷掷,可吹牛的內(nèi)容都是我干的辱姨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼戚嗅,長吁一口氣:“原來是場噩夢啊……” “哼雨涛!你這毒婦竟也來了枢舶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤替久,失蹤者是張志新(化名)和其女友劉穎凉泄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚯根,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡后众,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颅拦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒂誉。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖距帅,靈堂內(nèi)的尸體忽然破棺而出右锨,到底是詐尸還是另有隱情,我是刑警寧澤碌秸,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布绍移,位于F島的核電站,受9級特大地震影響哮肚,放射性物質(zhì)發(fā)生泄漏登夫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一允趟、第九天 我趴在偏房一處隱蔽的房頂上張望恼策。 院中可真熱鬧,春花似錦潮剪、人聲如沸涣楷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狮斗。三九已至,卻和暖如春弧蝇,著一層夾襖步出監(jiān)牢的瞬間碳褒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工看疗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沙峻,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓两芳,卻偏偏與公主長得像摔寨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子怖辆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評論 25 707
  • 哎呀呀 ,馬上就要面臨找工作了,媛媛心里緊張呀. 作為一個即將畢業(yè)的Android程序媛,開始面臨找工作了,...
    仇諾伊閱讀 4,539評論 7 59
  • 前幾天整理了Java面試題集合,今天再來整理下Android相關(guān)的面試題集合.如果你希望能得到最新的消息,可以關(guān)注...
    Boyko閱讀 3,621評論 8 135
  • 帶著對魏巍太行的憧憬與向往是复,我們一行六人删顶,在夏日清晨溫柔的陽光下,在幽幽的蟬鳴聲中淑廊,在孩子們歡樂的笑聲里逗余,...
    載馳閱讀 259評論 0 0
  • 鑒于本人是房地產(chǎn)行業(yè)從業(yè)人士猎荠,正巧本月的讀書主題又和房地產(chǎn)有關(guān),借此就和大家分享一下本人的從業(yè)經(jīng)歷和對房地產(chǎn)市...
    Amyfather閱讀 267評論 0 0