细数Android开发者的艰辛历程,全网最新
前言
這篇文章主要是分享今年面試心得,現(xiàn)已就職于某大廠有三個(gè)月了,近期有很多公司均已啟動(dòng)秋招,也祝大家面試順利,獲得理想的offer!
之前找工作的那段時(shí)間感想頗多,總結(jié)一點(diǎn)面試經(jīng)驗(yàn)和人生思考分享給大家。
這是我印象深刻的一道題,很明顯它是我的第一次,那時(shí)我去一家公司(暫時(shí)叫它T公司吧)面試外派到韓國(guó)三星的工作機(jī)會(huì)。T公司的面試官是一個(gè)叫Bely架構(gòu)師,顯然那個(gè)時(shí)候Android開(kāi)發(fā)是稀缺資源,知道Service那都不得了了,當(dāng)然Bely也沒(méi)打算為難我(必竟也工作4年多了,人長(zhǎng)得也不錯(cuò)),我輕松對(duì)答:
Service是一個(gè)專門在后臺(tái)處理長(zhǎng)時(shí)間任務(wù)的Android組件,它沒(méi)有UI。它有兩種啟動(dòng)方式,startService和bindService。
你猜得沒(méi)錯(cuò),Bely緊接著問(wèn)我:這兩種啟動(dòng)方式的區(qū)別。
startService只是啟動(dòng)Service,啟動(dòng)它的組件(如Activity)和Service并沒(méi)有關(guān)聯(lián),只有當(dāng)Service調(diào)用stopSelf或者其他組件調(diào)用stopService服務(wù)才會(huì)終止。
bindService方法啟動(dòng)Service,其他組件可以通過(guò)回調(diào)獲取Service的代理對(duì)象和Service交互,而這兩方也進(jìn)行了綁定,當(dāng)啟動(dòng)方銷毀時(shí),Service也會(huì)自動(dòng)進(jìn)行unBind操作,當(dāng)發(fā)現(xiàn)所有綁定都進(jìn)行了unBind時(shí)才會(huì)銷毀Service。
這應(yīng)該是比較關(guān)鍵的區(qū)別了,在面試前我剛剛用Serivce做過(guò)一個(gè)音樂(lè)播放器。幾年后,我在深圳面試過(guò)很多人,他們中有60-70%的人沒(méi)有使用Service的經(jīng)驗(yàn),讓我一度感覺(jué)得深圳這座城市做Android開(kāi)發(fā)的比較浮躁。因?yàn)檫@兒工作機(jī)會(huì)太多了,初級(jí)的開(kāi)發(fā)者都比較急功近利,不需要在自己身上下太多的功夫也可以找到工作(當(dāng)然這是片面的認(rèn)識(shí))。
當(dāng)然還有其他的區(qū)別,如兩種調(diào)用對(duì)Service生命周期函數(shù)影響,面試官也可以就這個(gè)問(wèn)題展開(kāi)一下。
當(dāng)我遇到面試者知道怎么使用Service,也如多年前的我可以自如的答出startService和bindService的區(qū)別時(shí),我一般會(huì)多問(wèn)一句:
Service的onCreate回調(diào)函數(shù)可以做耗時(shí)的操作嗎?
很多人都會(huì)說(shuō):可以。
原形畢露,他前面的回答只是在面試前預(yù)習(xí)了一下面試題而已。如果知道Service的onCreate是在主線程(ActivityThread)中調(diào)用的,耗時(shí)操作會(huì)阻塞UI,我一般再接著問(wèn):
如果需要做耗時(shí)的操作,你會(huì)怎么做?
問(wèn)題便這樣展開(kāi)了,一個(gè)人是否真正懂得原理會(huì)靈活運(yùn)用,一下子便能看出來(lái)。 當(dāng)面試者回答到線程和Handler方式時(shí),我會(huì)再問(wèn)一下對(duì)方:
是否知道IntentService,在什么場(chǎng)景下使用IntentService?
這也是面試官要看的點(diǎn),真正的項(xiàng)目需要一個(gè)開(kāi)發(fā)人員對(duì)某個(gè)問(wèn)題有一定的深度,也需要對(duì)整個(gè)Android的知識(shí)點(diǎn)有一定的廣度。深度代表這個(gè)人對(duì)問(wèn)題認(rèn)真對(duì)待有鉆研的精神,廣度代表這個(gè)人在面對(duì)同一個(gè)問(wèn)題時(shí),會(huì)更容易從多種可行的方案中選出最合適的一種。
Service的實(shí)際項(xiàng)目中一直被很多人忽略,為什么我一再?gòu)?qiáng)調(diào)Service很重要,我們來(lái)看看,如果對(duì)Service完全無(wú)知會(huì)在工作中遇到什么問(wèn)題。
場(chǎng)景:如果一個(gè)應(yīng)用要從網(wǎng)絡(luò)上下載MP3文件,并在Activity上展示進(jìn)度條,這個(gè)Activity要求是可以轉(zhuǎn)屏的。那么在轉(zhuǎn)屏?xí)rActvitiy會(huì)重啟,如何保證下載的進(jìn)度條能正確展示進(jìn)度呢?
沒(méi)有Service概念的人,一般想出來(lái)的方案如下:
針對(duì)第1個(gè)方案,我會(huì)繼續(xù)問(wèn)他將進(jìn)度值存在哪里? 轉(zhuǎn)屏的過(guò)程中,我們知道Activity的重建算是比較耗時(shí)的,會(huì)可能會(huì)有幾百毫秒以上,那么這時(shí)候下載線程仍然在工作,進(jìn)度肯定和保存時(shí)的進(jìn)度不一致了,如何處理這個(gè)問(wèn)題呢?
第2個(gè)方案,大家可以自己展開(kāi)思考,實(shí)際的項(xiàng)目中可能會(huì)需要額外做一些事情來(lái)處理ContentView的橫豎布局的問(wèn)題。
如果使用Service來(lái)解決這個(gè)問(wèn)題,看似是比較完美的,不過(guò)就會(huì)涉及Activity(UI)和Service的交互問(wèn)題,這個(gè)我們以后再討論。
文末
對(duì)于很多初中級(jí)Android工程師而言,想要提升技能,往往是自己摸索成長(zhǎng),不成體系的學(xué)習(xí)效果低效漫長(zhǎng)且無(wú)助。 整理的這些架構(gòu)技術(shù)希望對(duì)Android開(kāi)發(fā)的朋友們有所參考以及少走彎路,本文的重點(diǎn)是你有沒(méi)有收獲與成長(zhǎng),其余的都不重要,希望讀者們能謹(jǐn)記這一點(diǎn)。
最后想要拿高薪實(shí)現(xiàn)技術(shù)提升薪水得到質(zhì)的飛躍。最快捷的方式,就是有人可以帶著你一起分析,這樣學(xué)習(xí)起來(lái)最為高效,所以為了大家能夠順利進(jìn)階中高級(jí)、架構(gòu)師,我特地為大家準(zhǔn)備了一套高手學(xué)習(xí)的源碼和框架視頻等精品Android架構(gòu)師教程,保證你學(xué)了以后保證薪資上升一個(gè)臺(tái)階。
當(dāng)你有了學(xué)習(xí)線路,學(xué)習(xí)哪些內(nèi)容,也知道以后的路怎么走了,理論看多了總要實(shí)踐的。
以上進(jìn)階BATJ大廠學(xué)習(xí)資料可以免費(fèi)分享給大家,需要完整版的朋友,點(diǎn)這里可以看到全部?jī)?nèi)容。
進(jìn)階學(xué)習(xí)視頻
附上:我們之前因?yàn)榍镎惺占亩滓欢€互聯(lián)網(wǎng)公司Android面試真題?(含BAT、小米、華為、美團(tuán)、滴滴)和我自己整理Android復(fù)習(xí)筆記(包含Android基礎(chǔ)知識(shí)點(diǎn)、Android擴(kuò)展知識(shí)點(diǎn)、Android源碼解析、設(shè)計(jì)模式匯總、Gradle知識(shí)點(diǎn)、常見(jiàn)算法題匯總。)
模式匯總、Gradle知識(shí)點(diǎn)、常見(jiàn)算法題匯總。)
[外鏈圖片轉(zhuǎn)存中…(img-SDpcOCSo-1618563382984)]
總結(jié)
以上是生活随笔為你收集整理的细数Android开发者的艰辛历程,全网最新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu下编译安装node.js失败
- 下一篇: 成都欢乐谷体重限制