![【移動應(yīng)用開發(fā)技術(shù)】被問到Glide 源碼等突破性問題不好意思我都會_第1頁](http://file4.renrendoc.com/view/6ac5d82d9a921f1618febed720e77a79/6ac5d82d9a921f1618febed720e77a791.gif)
![【移動應(yīng)用開發(fā)技術(shù)】被問到Glide 源碼等突破性問題不好意思我都會_第2頁](http://file4.renrendoc.com/view/6ac5d82d9a921f1618febed720e77a79/6ac5d82d9a921f1618febed720e77a792.gif)
![【移動應(yīng)用開發(fā)技術(shù)】被問到Glide 源碼等突破性問題不好意思我都會_第3頁](http://file4.renrendoc.com/view/6ac5d82d9a921f1618febed720e77a79/6ac5d82d9a921f1618febed720e77a793.gif)
![【移動應(yīng)用開發(fā)技術(shù)】被問到Glide 源碼等突破性問題不好意思我都會_第4頁](http://file4.renrendoc.com/view/6ac5d82d9a921f1618febed720e77a79/6ac5d82d9a921f1618febed720e77a794.gif)
![【移動應(yīng)用開發(fā)技術(shù)】被問到Glide 源碼等突破性問題不好意思我都會_第5頁](http://file4.renrendoc.com/view/6ac5d82d9a921f1618febed720e77a79/6ac5d82d9a921f1618febed720e77a795.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】被問到Glide源碼等突破性問題,不好意思我都會
之前在一次面試中被問到數(shù)據(jù)庫.網(wǎng)絡(luò)請求.IntentService.view繪制.內(nèi)存泄漏.OOM.動畫框架.自定義view.Glide源碼.屬性動畫等等一系列的問題,雖然都答上來了,但是還是有一些細(xì)節(jié)性的東西沒有注意得到。
之前在一次面試中被問到數(shù)據(jù)庫.網(wǎng)絡(luò)請求.IntentService.view繪制.內(nèi)存泄漏.OOM.動畫框架.自定義view.Glide源碼.屬性動畫等等一系列的問題,雖然都答上來了,但是還是有一些細(xì)節(jié)性的東西沒有注意得到?;貋硪院蟀珊芏嘀R整理成了一份PDF,還是比較全面的(^▽^)從基礎(chǔ)到進(jìn)階。含有BATJ.字節(jié)跳動面試專題,算法專題,高端技術(shù)專題,混合開發(fā)專題,java面試專題,Android,Java小知識,到性能優(yōu)化.線程.View.OpenCV.NDK等應(yīng)有盡有。還有輔之相關(guān)的視頻+學(xué)習(xí)筆記(更多完整項(xiàng)目下載。未完待續(xù)。源碼。圖文知識后續(xù)上傳github。)可以點(diǎn)擊關(guān)于我聯(lián)系我獲取完整PDF(VX:m讀懂題目。如果碰到問題比較模糊的時候可以適當(dāng)問問面試官。配合面試官來面試:面試是一個相互了解的過程,要充分利用面試的題目和時間把自己的能力和技術(shù)展現(xiàn)出來,面試官能夠看到你的真實(shí)技術(shù)。直接操作SQL語句:SQliteDatabase.execSQL(sql);面向?qū)ο蟮牟僮鞣绞剑篠QLiteDatabase.insert(table,nullColumnHack,ContentValues);一般外部數(shù)據(jù)庫文件可能放在SD卡或者res/raw或者assets目錄下面。寫一個DBManager的類來管理,數(shù)據(jù)庫文件搬家,先把數(shù)據(jù)庫文件復(fù)制到”/data/data/包名/databases/”目錄下面,然后通過db.openOrCreateDatabase(db文件),打開數(shù)據(jù)庫使用。我上一個項(xiàng)目就是這么做的,由于app上架之前就有一些初始數(shù)據(jù)需要內(nèi)置,也會碰到數(shù)據(jù)的升級等問題,我是這么做的……同時我碰到最有意思的問題就是關(guān)于數(shù)據(jù)庫并發(fā)操作的問題,比如:多線程操作數(shù)據(jù)庫的時候,我采取的是封裝使用互斥鎖來解決……引入本地廣播的機(jī)制是為了解決安全性的問題:1)正在發(fā)送的廣播不會脫離應(yīng)用程序,比用擔(dān)心app的數(shù)據(jù)泄露;2)其他的程序無法發(fā)送到我的應(yīng)用程序內(nèi)部,不擔(dān)心安全漏洞。(比如:如何做一個殺不死的服務(wù)監(jiān)聽火的app比如微信、友盟、極光的廣播,來啟動自己。)3)發(fā)送本地廣播比發(fā)送全局的廣播高效。(全局廣播要維護(hù)的廣播集合表效率更低。全局廣播,意味著可以跨進(jìn)程,就需要底層的支持。)本地廣播不能用靜態(tài)注冊。靜態(tài)注冊:可以做到程序停止后還能監(jiān)聽。使用:如果有一個任務(wù),可以分成很多個子任務(wù),需要按照順序來完成,如果需要放到一個服務(wù)中完成,那么使用IntentService是最好的選擇。一般我們所使用的Service是運(yùn)行在主線程當(dāng)中的,所以在service里面編寫耗時的操作代碼,則會卡主線程會ANR。為了解決這樣的問題,谷歌引入了IntentService.IntentService的優(yōu)點(diǎn):(1)它創(chuàng)建一個獨(dú)立的工作線程來處理所有一個一個intent。(2)創(chuàng)建了一個工作隊(duì)列,來逐個發(fā)送intent給onHandleIntent()(3)不需要主動調(diào)用stopSelf()來結(jié)束服務(wù),因?yàn)樵创a里面自己實(shí)現(xiàn)了自動關(guān)閉。(4)默認(rèn)實(shí)現(xiàn)了onBind()返回的null。(5)默認(rèn)實(shí)現(xiàn)的onStartCommand()的目的是將intent插入到工作隊(duì)列。總結(jié):使用IntentService的好處有哪些。首先,省去了手動開線程的麻煩;第二,不用手動停止service;第三,由于設(shè)計(jì)了工作隊(duì)列,可以啟動多次startService(),但是只有一個service實(shí)例和一個工作線程。一個一個熟悉怒執(zhí)行。AIDL解決了什么問題?AIDL的全稱:AndroidInterfaceDefinitionLanguage,安卓接口定義語言。由于Android系統(tǒng)中的進(jìn)程之間不能共享內(nèi)存,所以需要提供一些機(jī)制在不同的進(jìn)程之間進(jìn)行數(shù)據(jù)通信。遠(yuǎn)程過程調(diào)用:RPC—RemoteProcedureCall。安卓就是提供了一種IDL的解決方案來公開自己的服務(wù)接口。AIDL:可以理解為雙方的一個協(xié)議合同。雙方都要持有這份協(xié)議文本協(xié)議xxx.aidl文件(安卓內(nèi)部編譯的時候會將aidl協(xié)議翻譯生成一個xxx.java文件代理模式:Binder驅(qū)動有關(guān)的,Linux底層通訊有關(guān)的。)在系統(tǒng)源碼里面有大量用到aidl,比如系統(tǒng)服務(wù)。電視機(jī)頂盒系統(tǒng)開發(fā)。你的服務(wù)要暴露給別的開發(fā)者來使用。講解Binder機(jī)制。Activity、Window、View三者如何協(xié)同顯示界面的??键c(diǎn):顯示的過程(view繪制流程)源碼的熟悉度。Activity剪窗花的人(控制的);Window窗戶(承載的一個模型);View窗花(要顯示的視圖View);LayoutInflater剪刀將布局(圖紙)剪成窗花。(Alt+方向箭頭)fragment的特點(diǎn)?(你用fragment有沒有領(lǐng)略到一些樂趣,或者有沒有踩過什么坑?)fragment的設(shè)計(jì)主要是把Activity界面包括其邏輯打碎成很多個獨(dú)立的模塊,這樣便于模塊的重用和更靈活地組裝呈現(xiàn)多樣的界面。踩過的坑:幾種情況:
1)一般很多高版本的新的API都會在兼容包里面找到替代的實(shí)現(xiàn)。比如fragment。Notification,在v4兼容包里面有NotificationCompat類。5.0+出現(xiàn)的backgroundTint,minSdk小于5.0的話會包檢測錯誤,v4兼容包DrawableCompat類。2)沒有替代實(shí)現(xiàn)就自己手動實(shí)現(xiàn)。比如:控件的水波紋效果—第三方實(shí)現(xiàn)?;蛘咧苯釉诘桶姹救コ@個效果。3)補(bǔ)充:如果設(shè)置了minSDK但是代碼里面使用了高版本的API,會出現(xiàn)檢測錯誤。需要在代碼里面使用聲明編譯檢測策略,比如:@SuppressLint和@TargetApi注解提示編譯器編譯的規(guī)則。@SuppressLint是忽略檢測;@TargetApi=23,會根據(jù)你函數(shù)里面使用的API,嚴(yán)格地匹配SDK版本,給出相應(yīng)的編譯錯誤提示。4)為了避免位置的錯誤,最好不要使用廢棄api。(一般情況下不會有兼容性問題,后面可能會隨時刪除這個API方法;性能方面的問題。)
1)一般很多高版本的新的API都會在兼容包里面找到替代的實(shí)現(xiàn)。比如fragment。Notification,在v4兼容包里面有NotificationCompat類。5.0+出現(xiàn)的backgroundTint,minSdk小于5.0的話會包檢測錯誤,v4兼容包DrawableCompat類。2)沒有替代實(shí)現(xiàn)就自己手動實(shí)現(xiàn)。比如:控件的水波紋效果—第三方實(shí)現(xiàn)?;蛘咧苯釉诘桶姹救コ@個效果。3)補(bǔ)充:如果設(shè)置了minSDK但是代碼里面使用了高版本的API,會出現(xiàn)檢測錯誤。需要在代碼里面使用聲明編譯檢測策略,比如:@SuppressLint和@TargetApi注解提示編譯器編譯的規(guī)則。@SuppressLint是忽略檢測;@TargetApi=23,會根據(jù)你函數(shù)里面使用的API,嚴(yán)格地匹配SDK版本,給出相應(yīng)的編譯錯誤提示。4)為了避免位置的錯誤,最好不要使用廢棄api。(一般情況下不會有兼容性問題,后面可能會隨時刪除這個API方法;性能方面的問題。)棧:先進(jìn)后出標(biāo)準(zhǔn)模式SingleTop:使用場景:瀏覽器的書簽;通訊消息聊天界面。SingleTask:使用場景:某個Activity當(dāng)做主界面的時候。SingleInstance:使用場景:比如瀏覽器BrowserActivity很耗內(nèi)存,很多app都會要調(diào)用它,這樣就可以把該Activity設(shè)置成單例模式。比如:鬧鐘鬧鈴。Measure:測量,測量自己。如果是ViewGroup就需要測量里面的所有childview.測量的結(jié)果怎么辦?setMeasuredDimension(resolveSizeAndState(maxWidth,widthMeasureSpec,childState),heightSizeAndState);設(shè)置自己的大小。Layout:擺放,把自己擺放在哪個位置。如果是ViewGroup就需要發(fā)放里面的所有childview.怎么去具體擺放呢?Draw:繪制/*
*Drawtraversalperformsseveraldrawingstepswhichmustbeexecuted
*intheappropriateorder:
*
*1.Drawthebackground
*2.Ifnecessary,savethecanvas'layerstoprepareforfading
*3.Drawview'scontent
*4.Drawchildren
*5.Ifnecessary,drawthefadingedgesandrestorelayers
*6.Drawdecorations(scrollbarsforinstance)
*/
1)什么是內(nèi)存泄漏:最好解釋清楚GC垃圾回收機(jī)制以及概念GCRoot。2)為什么會有內(nèi)存泄漏:因?yàn)閮?nèi)存泄漏是屬于人為的失誤造成的。而且面向?qū)ο箝_發(fā)關(guān)系復(fù)雜、多線程的關(guān)系,很容易出現(xiàn)引用層級關(guān)系很深以及很混亂。3)什么情況容易導(dǎo)致內(nèi)存泄漏:4)如何解決內(nèi)存泄漏
1)什么是內(nèi)存泄漏:最好解釋清楚GC垃圾回收機(jī)制以及概念GCRoot。2)為什么會有內(nèi)存泄漏:因?yàn)閮?nèi)存泄漏是屬于人為的失誤造成的。而且面向?qū)ο箝_發(fā)關(guān)系復(fù)雜、多線程的關(guān)系,很容易出現(xiàn)引用層級關(guān)系很深以及很混亂。3)什么情況容易導(dǎo)致內(nèi)存泄漏:4)如何解決內(nèi)存泄漏可以通過查看/data/anr/traces.txt查看ANR信息。根本原因是:主線程被卡了,導(dǎo)致應(yīng)用在5秒時間未響應(yīng)用戶的輸入事件。很多種ANR錯誤出現(xiàn)的場景:OOM產(chǎn)生的原因:內(nèi)存不足,android系統(tǒng)為每一個應(yīng)用程序都設(shè)置了一個硬性的條件:DalvikHeapSize最大閥值64M/48M/24M.如果你的應(yīng)用程序內(nèi)存占用接近這個閥值,此時如果再嘗試內(nèi)存分配的時候就會造成OOM。如何避免內(nèi)存泄露:1)減小對象的內(nèi)存占用:2)內(nèi)存對象的重復(fù)利用:使用對象池技術(shù),兩種:
自己寫;利用系統(tǒng)既有的對象池機(jī)制。比如LRU(LastRecentlyUse)算法。
a.ListView/GridView源碼可以看到重用的情況ConvertView的復(fù)用。RecyclerView中Recycler源碼。
b.Bitmap的復(fù)用Listview等要顯示大量圖片。需要使用LRU緩存機(jī)制來復(fù)用圖片。
c.避免在onDraw方法里面執(zhí)行對象的創(chuàng)建,要復(fù)用。避免內(nèi)存抖動。
d常見的java基礎(chǔ)問題StringBuilder等
自己寫;利用系統(tǒng)既有的對象池機(jī)制。比如LRU(LastRecentlyUse)算法。3)避免對象的內(nèi)存泄露4)使用一些內(nèi)存的優(yōu)化策略:看文檔1)通過Binder2)通過廣播把幾個關(guān)鍵版本的特性記?。?.0/4.0、4.4、5.0、6.0/7.0RequestLayout()方法:會導(dǎo)致調(diào)用Measure()方法和layout()。將會根據(jù)標(biāo)志位判斷是否需要onDraw();onLayout():擺放viewGroup里面的子控件onDraw():繪制視圖本身;(ViewGroup還需要繪制里面的所有子控件)drawChild():重新回調(diào)每一個子視圖的draw方法。child.draw(canvas,this,drawingTime);invalidate():在主線程當(dāng)中刷新;postInvalidate():在子線程當(dāng)中刷新;其實(shí)最終調(diào)用的就是invalidate,原理依然是通過工作線程向主線程發(fā)送消息這一機(jī)制。publicvoidpostInvalidate(){
postInvalidateDelayed(0);
}
publicvoidpostInvalidateDelayed(longdelayMilliseconds){
//WetryonlywiththeAttachInfobecausethere'snopointininvalidating
//ifwearenotattachedtoourwindow
finalAttachInfoattachInfo=mAttachInfo;
if(attachInfo!=null){
attachInfo.mViewRootImpl.dispatchInvalidateDelayed(this,delayMilliseconds);
}
}
publicvoiddispatchInvalidateDelayed(Viewview,longdelayMilliseconds){
Messagemsg=mHandler.obtainMessage(MSG_INVALIDATE,view);
mHandler.sendMessageDelayed(msg,delayMilliseconds);
}
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
caseMSG_INVALIDATE:
((View)msg.obj).invalidate();
break;傳統(tǒng)的動畫框架:View.startAnimation();弊端:移動后不能點(diǎn)擊。原因?跟實(shí)現(xiàn)機(jī)制有關(guān)系。所有的透明度、旋轉(zhuǎn)、平移、縮放動畫,都是在view不斷刷新調(diào)用draw的情況下實(shí)現(xiàn)的。調(diào)用的canvas.translate(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東城市建設(shè)職業(yè)學(xué)院《新媒體產(chǎn)品設(shè)計(jì)與項(xiàng)目管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西藝術(shù)學(xué)院《電機(jī)原理與電機(jī)拖動》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東南華工商職業(yè)學(xué)院《推拿按摩技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西安全工程職業(yè)技術(shù)學(xué)院《文化資源學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東金融學(xué)院《有限元基礎(chǔ)與軟件應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 昌吉職業(yè)技術(shù)學(xué)院《預(yù)算會計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 邯鄲科技職業(yè)學(xué)院《軟件設(shè)計(jì)模式與體系結(jié)構(gòu)(雙語)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京中醫(yī)藥大學(xué)《環(huán)境衛(wèi)生學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東藥科大學(xué)《明清史研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年度草莓苗種植基地農(nóng)業(yè)觀光合作合同
- 數(shù)學(xué)-河南省三門峽市2024-2025學(xué)年高二上學(xué)期1月期末調(diào)研考試試題和答案
- 2025年春新人教版數(shù)學(xué)七年級下冊教學(xué)課件
- 《心臟血管的解剖》課件
- 心肺復(fù)蘇課件2024
- 2024-2030年中國并購基金行業(yè)發(fā)展前景預(yù)測及投資策略研究報告
- 河道清淤安全培訓(xùn)課件
- 2024各科普通高中課程標(biāo)準(zhǔn)
- 7.3.1印度(第1課時)七年級地理下冊(人教版)
- 教師培訓(xùn)校園安全
- 北師大版語文四年級下冊全冊教案
- 《湖南師范大學(xué)》課件
評論
0/150
提交評論