2020 Android 進階之路,「從風口看將來,以架構贏世界」

過去十年是移動互聯網蓬勃發展的黃金期,相信每一個人也都享受到了移動互聯網紅利,在此期間,移動互聯網經歷了曙光期、成長期、成熟期、如今來講已經進入飽和期。依然記得在 2010-2013 年期間,從事移動開發工做不知有多火,有工做 1-2 年經驗的開發者薪資基本是上萬,對招的人專業素質要求也不高,入門便可。從 2016 年末至今來看,局面而是另一番景象,移動開發市場過分飽和,市場上充斥着太多初級開發者,網上一直流傳着移動互聯網的寒冬,不少開發者找工做都沒之前好找,一些崗位經常面臨着鳳毛麟角景象,沒有個三五年經驗,如今 HR 都是刷刷的翻過。前端

那麼不由要反問一句,如今從事移動開發,不管是 Android 仍是 IOS,將來還有發展空間嗎?還有隨着移動開發愈來愈向大前端靠攏,甚至本來一些屬於原生開發者的崗位也被前端開發人員勝任,想一想在原本擁擠的房間裏,還要分割原本屬於本身那麼點空間給他人用,變得更擁擠了,那滋味確定是很差受了,那麼將來咱們的容身之地又在哪裏呢?面試

筆者是從 2013 年末開始從事移動開發,剛畢業那麼仍是從事服務端開發,寫着.NET 技術棧代碼,至今也有接近 5 年的經驗了。我想說,若是僅僅停留在表面的框架上,僅僅停留在使用別人的輪子上,而對於裏面實現機制和原理不求甚解的話,那是很容易被淘汰的。可是若是,在移動開發上有一門深度的技能,好比在 Android 中你對移動架構有必定獨特的看法,在性能優化上有必定的造詣,對於Android 系統體系有着清晰的認知,而且在一個行業積累了豐富的行業經驗,也是亮點所在,那基本就是屬於吃香的類型了。因此簡單來講,對於一個概念不能停留在使用層面,要深刻研究裏面構造如何,爲什麼會有這麼一個概念,若是沒有這個概念,那又會是呈現什麼樣的局面呢?開發編程也是同樣,要追尋的是編程的道,而不是編程的術,別看如今各類流行框架大行其道,要是深刻研究下去,一層一層撥開,你也會驚訝裏面的實現機制無外乎就那麼幾種,套來套去,只不過一些開源庫做者或組織封裝的好而已。算法

基於目前市場表現,咱們都知道下一個風口是 AI,可是做爲一個移動開發者如何在即未來臨的 AI 時代吃口紅利呢。個人回答是:致力於作一個終身學習者,追本溯源去探尋代碼世界哪些不變的道,你又會說了,哪些是道呢,簡單舉例下,好比編程思想、經常使用的設計模式、設計原則、算法和數據結構、網絡通訊機制、操做系統、重構原則、架構思惟等等。同時在目前發展情形下,也愈來愈趨向全棧工程師的路線,借用以前在網上看到一篇文章的圖,想進階全棧工程師之路看須要哪些技能,以下:編程

從圖中能夠看到技能被分紅基礎軟技能、技術軟硬技能,不只要熟悉移動端開發套路,還要對大前端技術棧也有必定要掌握,同時對於服務端開發流程也要了解,咱們不少從事移動開發人員,基本一開始就是從移動端入手,對於服務端開發不少時候是沒有概念,這些跟那種從服務端開發轉型作移動開發相比起來就處於必定的劣勢了,有些甚至不知道 Restful 是什麼,還覺得是一種框架呢,其實這僅僅只是服務端約定好的接口編碼風格而已。設計模式

進階之路

爲什麼會想起寫這麼一篇文章呢,一方面這幾天工做須要,組內正好想規劃 2020 年 Android 技術路線,簡單來講就是目前咱們組處在什麼樣的水平程度,目前所作項目用的技術處在什麼階段,在將來一年內,項目技術迭代該如何走,走到什麼程度。另外一方面是從事 Android 開發這幾年,一直也沒好好規劃本身的技術路線,想認真整理下將來進階之路。咱們都知道 Android 技術體系一直很龐大,剛開始學的時候基本是從一個點一個點開始,沒有系統全局觀概念,同時也是學不過來,從作上層應用開始,到作 Framework 層,而後再到系統層作驅動開發各個層面的開發者都有,絕大部分開發者都是從應用層開發,每每作到 Framework 層就淺嘗輒止了,一直以來,作Android 開發有這麼兩個說法,若是是作應用開發,往應用架構方向發展比較合適,若是是作系統層開發,每每底層驅動比較合適。瀏覽器

看張圖:安全

挑些圖中幾個點簡單來談談本身的一些想法。性能優化

移動架構

移動架構是 2017 移動技術年度TOP5話題之一,從中就體會到架構是有多火,記得剛開始學 Android 時候,哪有如今那麼框架,那時候談架構的更可能是在服務端開發,好比多層架構,有展現層、業務邏輯層、數據訪問層這就是最簡單的三層模式,Android系統則是基於事件驅動響應機制設計的單頁面架構,其實跟瀏覽器中的窗口頁面是同樣的, 系統中一直有個消息輪詢監聽機制,哪一個事件被觸發了,相應的響應代碼進行處理,這些處理操做是被提早註冊到系統中。服務器

最先開始的開發模式基本是基於Android 系統自帶 MVC 模式,Activity 基本相似於Control 的做用了,View 和Mode 互相耦合,後來才演化出如今主流的 MVP、MVVM 模式,順便提一句,MVVM 模式實際上是在微軟 WPF 技術體系中提出來。微信

圖中顯示兩個方面:

展現層: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components

架構層:模塊化->組件化->插件化->沙盒/雙開技術,好比能夠雙開微信,相似Docker, 每一個頁面都是插件,相似Vue.js中每一個頁面都是組件。

性能優化

簡單來講,一個APP 是須要從三個方面被關注的,業務功能、符合邏輯的交互、性能響應。若是咱們在使用一個 APP 時候,常常滑動時常常卡頓、時不時崩潰、有些功能設計簡直很是規,好比在 Web 網站有樹層級等麪包屑點擊,你非要在手機也搞一個相似樹級點擊加載,那是否是有點強人所難了,我上拉下拉、左滑右滑不行嗎,非要經過點擊才行嗎?那麼性能優化核心是什麼呢?追求快、穩、省、小,關注卡頓、內存泄漏和崩潰、代碼質量和邏輯、安裝包大小四個方面。想進一步的瞭解的話,能夠查閱下這篇文章《Android APP 性能優化的一些思考》

APP安全

APP從代碼安全、到傳輸安全,再到存儲安全。代碼能夠經過混淆、加固來保證、傳輸安全基本基於加密算法和Token來保證傳輸的惟一性、存儲應用不可逆加密算法進行設置、因此掌握一些密碼學理論尤其重要,起碼要知道哈希散列算法,對稱加密和非對稱加密等一些常見的加密算法。

基礎進階

咱們日常在工做中碰到的View滑動衝突問題、其實經過掌握View工做機制和Android觸摸事件體系就能輕易解決掉,常看法決方式有外部攔截法和內部攔截法,基於橫座標滑動距離與縱座標滑動距離相減得出的值,判斷出是左右滑動仍是上下滑動。還有對於須要開發絢麗的動畫效果,那麼對於視圖動畫和屬性動畫一些特性必須有必定的瞭解。JNI 和 NDK 開發也是比較常見,特別對於一些作 SDK 項目爲主的,這一塊開發流程也是須要掌握,Android 中的四大組件工做機制其實底層應用的是Binder機制,咱們不妨從 AIDL 這個接口來了解 Binder。

持續集成

持續集成編譯環境是敏捷開發中很重要的一個組成部分,它可以有效地提升整個團隊的生產效率,最大化的減小人爲的出錯的可能。好比,經過代碼的持續提交,能夠減小代碼合併的痛苦,更快地與其餘人代碼集成,經過集成編譯,可以及早地發現代碼庫存在的錯誤,並支持產品、測試等人員及時取包進行功能驗證,因此對於Git、Gradle工具、Jenkins服務器須要掌握起來。

開發語言

19年能夠說是 Kotlin 年,在 Google IO 以後 Kotlin 着實風光了一把,開發者對於效率的追求是 Kotlin 如此受歡迎的最大緣由,而它的勢頭也很不錯,跨平臺的野心讓更多人有了使用它的理由,現在看起來,它甚至比 Swift 更有前途。既然 Kotlin 已然成爲 Android 世界的頭等公民,與 Java 徹底兼容,咱們有什麼理由不去擁抱它呢。

大前端

其實移動端開發也是屬於前端開發,只不過原來咱們所指的前端每每都是Web的前端開發人員,開發的是網站,而移動端未嘗不是一種展現載體,一樣有入口,只不過相比網站端移動端具體自然的可移動性、可便捷性等特性。隨着 H5 興起,原生能實現的功能一樣在 H5 端也能實現,而且在體驗性方面也逐漸提升,而且H5天生就具備動態性和跨平臺,這也是 H5 可以一時潮流的緣由之一。

設計原則

這些設計原創纔是本質,纔是不變的,纔是咱們須要真正要掌握的,開發語言特性、開發框架發展實在是太快了,咱們更不上,不是有這麼一句話嗎,封裝具體變化的,抽象起來就行,去追尋哪些不變的內容。掌握一種設計模式其實也就掌握一種解決方案,這些都是前人總結的知識結晶,基本都是基於特定領域解決特定的問題,咱們須要學會在前人肩膀上解決問題。

服務端開發

最近微服務火的一塌糊塗,雖然咱們基本是作移動端開發,可是基於全棧發展的趨勢,對於服務端開發勢必要了解,可能沒有實戰項目讓你真刀真槍的幹,可是對於微服務的結構理論、服務與服務之間通訊、聚合是什麼樣的流程也是須要有所耳聞,在本身擅長領域深刻專研的同時橫向擴展關注也是須要的,不能關起門來閉門造車,兩耳不聞窗外事那是不行的。

閱讀源碼

對於Android源碼和第三方庫源碼閱讀,能夠根據本身感興趣的類型,選擇相應的源碼庫或模塊,給本身約定一個時間點,看完以後最後有個流程圖,哪些是核心類,類與類之間都有什麼關係,這些開源代碼實現的機制是什麼,用到哪些解決思想,這些要點最終能夠經過文章輸出,我以爲輸出倒逼輸入是一種很不錯的學習方式。

移動AI

AI,也稱人工智能,1956年,在達特茅斯學院舉行的一次會議上正式確立了人工智能的研究領域。會議的參加者在接下來的數十年間是AI研究的領軍人物,他們中有許多人預言,通過一代人的努力,與人類具備同等智能水平的機器將會出現。如今來看AI這個概念很早就存在了,以前沒發展很大緣由是基礎設施不夠完善、研究成本高,如今可以大力發展是基於咱們的網絡帶寬變大、計算機性能提高、計算成本下降等等因素備齊了。AI是須要經過算法來落地,那麼對於算法理論背景就是數學,因此想進階AI開發,就須要去學習相關數學知識,特別是線性代數和機率論這兩門,是支撐不少算法的理論知識。

Android學習PDF+架構視頻+面試文檔+源碼筆記

小結

總的來講,技術發展能推進社會的進步,解放生產力,進而提升人的社會生產效率,創造價值。技術落地是須要商業應用場景配合,如何配合呢,就是經過每一個不一樣商業模式來實現。最終一門技術是須要與具體使用業務緊密結合起來,若是脫離技術談業務顯得空洞,脫離業務談技術顯得偏理論,最好是二者相結合。這也就要求咱們這些從事軟件開發人員在追求技術積累的同時要注重業務積累,讓業務驅動技術發展,用技術手段來解決實際業務問題,在技術積累中,辨別哪些是不變的道,哪些又是一時流行的而已,這就須要練就一雙火眼金睛了。


在這也分享一份大佬本身收錄整理的 Android學習PDF+架構視頻+面試文檔+源碼筆記 ,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助你們學習提高進階,也節省你們在網上搜索資料的時間來學習,也能夠分享給身邊好友一塊兒學習

若是你有須要的話,能夠點贊+評論關注我加Vx:15388039515(備註思否,須要進階資料)

相關文章
相關標籤/搜索