前言
我最近在籌備Android面試的相關文章,我發現,Framework是一個十分重要的點,被不少大廠所看重。
如圖,這是我們的一個技術交流群裡面的對話↓↓↓

前陣子我寫的Android技術文裡面,關于Framework這個知識點的文閱讀量破千,但是,有很多朋友私信我說那篇文寫的不夠詳細,文章深度不夠,學不到什麼東西。
感受到了大家對這個知識點的熱情,我最近也一直在留意這個方面的知識。
不久前,一個騰訊的朋友說他們那裡有一個T4的大佬每天熬夜到淩晨,肝了半個月,把Android Framework 核心解析精編成了452頁的PDF!更牛掰的是——現在這份資料開放下載下傳了!
想不到,想睡覺的時候正好有人送來了枕頭,得知這個内部資訊的我趕緊打開電腦,飛速的敲起了鍵盤,把這個消息告訴大家:
你們要的幹貨來了!!!
1.要做一個盡可能流暢的ListView,你平時在工作中如何進行優化的?
①Item布局,層級越少越好,使用hierarchyview工具檢視優化。
②複用convertView
③使用ViewHolder
④item中有圖檔時,異步加載
⑤快速滑動時,不加載圖檔
⑥item中有圖檔時,應對圖檔進行适當壓縮
⑦實作資料的分頁加載
2.對于Android 的安全問題,你知道多少
①錯誤導出元件
② 參數校驗不嚴
③WebView引入各種安全問題,webview中的js注入
④不混淆、不防二次打包
⑤明文存儲關鍵資訊
⑦ 錯誤使用HTTPS
⑧山寨加密方法
⑨濫用權限、記憶體洩露、使用debug簽名
3. 如何縮減APK包大小?
代碼
保持良好的程式設計習慣,不要重複或者不用的代碼,謹慎添加libs,移除使用不到的libs。
使用proguard混淆代碼,它會對不用的代碼做優化,并且混淆後也能夠減少安裝包的大小。
native code的部分,大多數情況下隻需要支援armabi與x86的架構即可。如果非必須,可以考慮拿掉x86的部分。
資源
使用Lint工具查找沒有使用到的資源。去除不使用的圖檔,String,XML等等。 assets目錄下的資源請確定沒有用不上的檔案。
生成APK的時候,aapt工具本身會對png做優化,但是在此之前還可以使用其他工具如tinypng對圖檔進行進一步的壓縮預處理。
jpeg還是png,根據需要做選擇,在某些時候jpeg可以減少圖檔的體積。 對于9.png的圖檔,可拉伸區域盡量切小,另外可以通過使用9.png拉伸達到大圖效果的時候盡量不要使用整張大圖。
政策
有選擇性的提供hdpi,xhdpi,xxhdpi的圖檔資源。建議優先提供xhdpi的圖檔,對于mdpi,ldpi與xxxhdpi根據需要提供有差異的部分即可。
盡可能的重用已有的圖檔資源。例如對稱的圖檔,隻需要提供一張,另外一張圖檔可以通過代碼旋轉的方式實作。
能用代碼繪制實作的功能,盡量不要使用大量的圖檔。例如減少使用多張圖檔組成animate-list的AnimationDrawable,這種方式提供了多張圖檔很占空間。
4.Android與伺服器互動的方式中的對稱加密和非對稱加密是什麼?
對稱加密,就是加密和解密資料都是使用同一個key,這方面的算法有DES。
非對稱加密,加密和解密是使用不同的key。發送資料之前要先和服務端約定生成公鑰和私鑰,使用公鑰加密的資料可以用私鑰解密,反之。這方面的算法有RSA。ssh 和 ssl都是典型的非對稱加密。
5.裝置橫豎屏切換的時候,接下來會發生什麼?
1、不設定Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設定Activity的android:configChanges=”orientation”時,切屏還是會重新調用各個生命周期,切橫、豎屏時隻會執行一次
3、設定Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新調用各個生命周期,隻會執行onConfigurationChanged方法
6.Android啟動Service的兩種方式是什麼? 它們的适用情況是什麼?
如果背景服務開始後基本可以獨立運作的話,可以用startService。音樂播放器就可以這樣用。它們會一直運作直到你調用 stopSelf或者stopService。你可以通過發送Intent或者接收Intent來與正在運作的背景服務通信,但大部分時間,你隻是啟動服務并讓它獨立運作。如果你需要與背景服務通過一個持續的連接配接來比較頻繁地通信,建議使用bind()。比如你需要定位服務不停地把更新後的地理位置傳給UI。Binder比Intent開發起來複雜一些,但如果真的需要,你也隻能使用它。
**startService:**生命周期與調用者不同。啟動後若調用者未調用stopService而直接退出,Service仍會運作
**bindService:**生命周期與調用者綁定,調用者一旦退出,Service就會調用unBind->onDestroy
7.談談你對Android中Context的了解?
**Context:**包含上下文資訊(外部值) 的一個參數. Android 中的 Context 分三種,Application Context ,Activity Context ,Service Context.
它描述的是一個應用程式環境的資訊,通過它我們可以擷取應用程式的資源和類,也包括一些應用級别操作,例如:啟動一個Activity,發送廣播,接受Intent資訊等
8.Service的onCreate回調在UI線程中嗎?
Service生命周期的各個回調和其他的應用元件一樣,是跑在主線程中,會影響到你的UI操作或者阻塞主線程中的其他事情
寫在最後
很多人在剛接觸這個行業的時候或者是在遇到瓶頸期的時候,總會遇到一些問題,比如學了一段時間感覺沒有方向感,不知道該從哪裡入手去學習,對此我整理了一些資料,需要的可以免費分享給大家
我的【Github】會分享一些關于Android進階方面的知識,也會分享一下最新的面試題~
如果你熟練掌握GitHub中列出的知識點,相信将會大大增加你通過前兩輪技術面試的幾率!這些内容都供大家參考,互相學習。
①「Android面試真題解析大全」PDF完整高清版+②「Android面試知識體系」學習思維導圖壓縮包——————可以在我的【Github】閱讀下載下傳,最後覺得有幫助、有需要的朋友可以點個贊![]()
Android事件分發機制收藏這一篇就夠了,附詳細答案 ![]()
Android事件分發機制收藏這一篇就夠了,附詳細答案
覺得有幫助、有需要的朋友可以點個贊
[外鍊圖檔轉存中…(img-VagpXxCg-1624139510319)]
[外鍊圖檔轉存中…(img-ZOzdjOPQ-1624139510320)]
![]()
Android事件分發機制收藏這一篇就夠了,附詳細答案