天天看點

程式員35歲真的是分水嶺嗎?Android面試題及解析

自己項目中一直都是用的開源的xUtils架構,包括BitmapUtils、DbUtils、ViewUtils和HttpUtils四大子產品,這四大子產品都是項目中比較常用的。最近決定研究一下xUtils的源碼,用了這麼久總得知道它的實作原理吧。我是先從先從BitmapUtils子產品開始的。BitmapUtils和大多數圖檔加載架構一樣,都是基于記憶體-檔案-網絡三級緩存。也就是加載圖檔的時候首先從記憶體緩存中取,如果沒有再從檔案緩存中取,如果檔案緩存沒有取到,就從網絡下載下傳圖檔并且加入記憶體和檔案緩存。

這篇文章先分析記憶體緩存是如何實作的。好吧開始進入正題。

移動跨平台技術演進

1. 引言

移動網際網路發展十餘年,伴随着 Android、iOS 等智能手機的不斷普及,移動端已逐漸取代 PC 端,成為兵家必争之地。正所謂“得移動端者得天下”,移動端已成為網際網路領域最大的流量分發入口,一大批網際網路公司正是在這大趨勢下崛起。

2. 為什麼需要跨平台技術

伴随着移動網際網路的高速發展,公司間競争越來越激烈,如何将好想法快速落地、快速試錯,成為備受關注的問題。提升研發效率、縮短研發周期,保障産品快速試錯并能快速疊代新功能,讓新産品新功能以最快的速度同時抵達 Android、iOS 等多端使用者。

衆所周知,Android 應用采用 Java 或 Kotlin 編寫,iOS 應用采用 Objective-C 或 Swift 編寫,Web 端采用 HTML /CSS/JavaScript 編寫。當需要開發支援多端的應用,每一端都需要獨立研發、測試,一直到上線,以及後續的維護工作,工作量成倍增漲,勢必延長研發周期。

為了解決多端獨立開發的問題,跨平台技術便應運而生,各大網際網路公司為此都投入大量人力,于是出現了各種跨平台技術架構,面對移動領域的跨平台技術方案的層出不窮,又該如何做技術選型呢?

3. 移動端技術選型

作為移動端的跨端技術方案,所關注無外乎以下這4個方面:研發效率、動态性、多端一緻性、性能體驗。

程式員35歲真的是分水嶺嗎?Android面試題及解析
  1. 研發效率:最大化代碼複用,減少多端差異的适配工作量,降低開發成本,專注業務開發,實作“write once,run everywhere”的終極目标。效率提升是貫穿整個業務的生命周期線,即便業務上線後,可持續降低後續的維護成本,加快新feature的疊代速度,這是一個持續的效率收益。當然,這裡不得不說,任何一門新技術在開發啟動學習階段會有一些成本,但上手後的收益是長期的。
  2. 動态化:突破管道的更新頻率,可快速疊代新功能,這一點不僅是跨平台技術的訴求,也是Native技術必備的殺手锏,這也是評估跨端技術的一個重要考核點。
  3. 多端一緻性:好産品在多端UI設計上,往往是整體風格統一,是以業務方采用原生各自獨立開發完成後,還需額外花不少時間來修改UI以保證多端一緻性;可見,各端獨立實作開發方式,帶來的效率滞後,不僅僅是Android和iOS各開發一份代碼的工作量,還有雙端UI的一緻性對齊的工作。
  4. 性能體驗:一般地,跨端技術方案擁有以上多重優勢,但在性能方面比原生流暢更差些。犧牲部分體驗換來效率提升,這一點也是情理之中,試想一下,跨平台技術方案同時兼得這4點,那麼原生技術恐怕已退出曆史舞台,早已是跨平台技術的天下,是以往往跨平台技術的性能優劣便成為核心名額。

4. 跨平台技術劃分

對研發效率和體驗的不斷追逐,移動端的跨平台技術方架構層出不窮,然則天下武功衆多,萬變不離其宗,從其核心本質來劃分,可大緻分為以下三大類:

程式員35歲真的是分水嶺嗎?Android面試題及解析
  1. Web技術:主要依賴于WebView的技術,功能支援受限,性能體驗很差,比如PhoneGap、Cordova、小程式。
  2. 原生渲染:使用JavaScript作為程式設計語言,通過中間層轉化為原生控件來渲染UI界面,比如React Native、Weex。
  3. 自渲染技術:自行實作一套渲染架構,可通過調用skia等方式完成自渲染,而不依賴于原生控件,比如Flutter、Unity。

最後

針對Android程式員,我這邊給大家整理了一些資料,包括不限于進階UI、性能優化、架構師課程、NDK、混合式開發(ReactNative+Weex)微信小程式、Flutter等全方面的Android進階實踐技術;希望能幫助到大家,也節省大家在網上搜尋資料的時間來學習,也可以分享動态給身邊好友一起學習!

資料領取:點贊免費擷取Android IOC架構設計
領取擷取往期Android進階架構資料、源碼、筆記、視訊。進階UI、性能優化、架構師課程、混合式開發(ReactNative+Weex)全方面的Android進階實踐技術,群内還有技術大牛一起讨論交流解決問題。
程式員35歲真的是分水嶺嗎?Android面試題及解析

解決問題。**

[外鍊圖檔轉存中…(img-p1x8yH3x-1617867014217)]

程式員35歲真的是分水嶺嗎?Android面試題及解析