轉(zhuǎn):淺談Android進階之路「2018-01-31 」

過去十年是移動互聯(lián)網(wǎng)蓬勃發(fā)展的黃金期,相信每個人也都享受到了移動互聯(lián)網(wǎng)紅利,在此期間,移動互聯(lián)網(wǎng)經(jīng)歷了曙光期、成長期、成熟期、現(xiàn)在來說已經(jīng)進入飽和期。依然記得在 2010-2013 年期間,從事移動開發(fā)工作不知有多火,有工作 1-2 年經(jīng)驗的開發(fā)者薪資基本是上萬,對招的人專業(yè)素質(zhì)要求也不高,入門即可。從 2016 年底至今來看,局面而是另外一番景象,移動開發(fā)市場過度飽和,市場上充斥著太多初級開發(fā)者,網(wǎng)上一直流傳著移動互聯(lián)網(wǎng)的寒冬,很多開發(fā)者找工作都沒以前好找,一些崗位常常面臨著百里挑一景象,沒有個三五年經(jīng)驗,現(xiàn)在 HR 都是刷刷的翻過。

那么不禁要反問一句,現(xiàn)在從事移動開發(fā),無論是 Android 還是 IOS,未來還有發(fā)展空間嗎?還有隨著移動開發(fā)越來越向大前端靠攏,甚至原本一些屬于原生開發(fā)者的崗位也被前端開發(fā)人員勝任,想想在本來擁擠的房間里,還要分割本來屬于自己那么點空間給他人用,變得更擁擠了,那滋味肯定是不好受了,那么未來我們的容身之地又在哪里呢?

筆者是從 2013 年底開始從事移動開發(fā),剛畢業(yè)那么還是從事服務端開發(fā),寫著.NET?技術(shù)棧代碼,至今也有接近 5 年的經(jīng)驗了。我想說,如果僅僅停留在表面的框架上,僅僅停留在使用別人的輪子上,而對于里面實現(xiàn)機制和原理不求甚解的話,那是很容易被淘汰的。但是如果,在移動開發(fā)上有一門深度的技能,比如在 Android 中你對移動架構(gòu)有一定獨特的見解,在性能優(yōu)化上有一定的造詣,對于Android 系統(tǒng)體系有著清晰的認知,并且在一個行業(yè)積累了豐富的行業(yè)經(jīng)驗,也是亮點所在,那基本就是屬于吃香的類型了。所以簡單來說,對于一個概念不能停留在使用層面,要深入研究里面構(gòu)造如何,為何會有這么一個概念,如果沒有這個概念,那又會是呈現(xiàn)什么樣的局面呢?開發(fā)編程也是一樣,要追尋的是編程的道,而不是編程的術(shù),別看現(xiàn)在各種流行框架大行其道,要是深入研究下去,一層一層撥開,你也會驚訝里面的實現(xiàn)機制無外乎就那么幾種,套來套去,只不過一些開源庫作者或組織封裝的好而已。

基于目前市場表現(xiàn),我們都知道下一個風口是 AI,但是作為一個移動開發(fā)者如何在即將來臨的 AI 時代吃口紅利呢。我的回答是:致力于做一個終身學習者,追本溯源去探尋代碼世界哪些不變的道,你又會說了,哪些是道呢,簡單舉例下,比如編程思想、常用的設計模式、設計原則、算法和數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡通信機制、操作系統(tǒng)、重構(gòu)原則、架構(gòu)思維等等。同時在目前發(fā)展情形下,也越來越趨向全棧工程師的路線,借用之前在網(wǎng)上看到一篇文章的圖,想進階全棧工程師之路看需要哪些技能,如下:

從圖中可以看到技能被分成基礎(chǔ)軟技能、技術(shù)軟硬技能,不僅要熟悉移動端開發(fā)套路,還要對大前端技術(shù)棧也有一定要掌握,同時對于服務端開發(fā)流程也要了解,我們很多從事移動開發(fā)人員,基本一開始就是從移動端入手,對于服務端開發(fā)很多時候是沒有概念,這些跟那種從服務端開發(fā)轉(zhuǎn)型做移動開發(fā)相比起來就處于一定的劣勢了,有些甚至不知道 Restful 是什么,還以為是一種框架呢,其實這僅僅只是服務端約定好的接口編碼風格而已。

進階之路

為何會想起寫這么一篇文章呢,一方面這幾天工作需要,組內(nèi)正好想規(guī)劃 2018 年 Android 技術(shù)路線,簡單來說就是目前我們組處在什么樣的水平程度,目前所做項目用的技術(shù)處在什么階段,在未來一年內(nèi),項目技術(shù)迭代該如何走,走到什么程度。另一方面是從事 Android 開發(fā)這幾年,一直也沒好好規(guī)劃自己的技術(shù)路線,想認真整理下未來進階之路。我們都知道 Android 技術(shù)體系一直很龐大,剛開始學的時候基本是從一個點一個點開始,沒有系統(tǒng)全局觀概念,同時也是學不過來,從做上層應用開始,到做 Framework 層,然后再到系統(tǒng)層做驅(qū)動開發(fā)各個層面的開發(fā)者都有,絕大部分開發(fā)者都是從應用層開發(fā),往往做到 Framework 層就淺嘗輒止了,一直以來,做Android 開發(fā)有這么兩個說法,如果是做應用開發(fā),往應用架構(gòu)方向發(fā)展比較合適,如果是做系統(tǒng)層開發(fā),往往底層驅(qū)動比較合適。

看張圖:

挑些圖中幾個點簡單來談談自己的一些想法。

移動架構(gòu)?

移動架構(gòu)是 2017 移動技術(shù)年度TOP5話題之一,從中就體會到架構(gòu)是有多火,記得剛開始學 Android 時候,哪有現(xiàn)在那么框架,那時候談架構(gòu)的更多是在服務端開發(fā),比如多層架構(gòu),有展示層、業(yè)務邏輯層、數(shù)據(jù)訪問層這就是最簡單的三層模式,Android系統(tǒng)則是基于事件驅(qū)動響應機制設計的單頁面架構(gòu),其實跟瀏覽器中的窗口頁面是一樣的, 系統(tǒng)中一直有個消息輪詢監(jiān)聽機制,哪個事件被觸發(fā)了,相應的響應代碼進行處理,這些處理操作是被提前注冊到系統(tǒng)中。

最早開始的開發(fā)模式基本是基于Android 系統(tǒng)自帶 MVC 模式,Activity 基本類似于Control 的作用了,View 和Mode 互相耦合,后來才演化出現(xiàn)在主流的 MVP、MVVM 模式,順便提一句,MVVM 模式其實是在微軟 WPF 技術(shù)體系中提出來。

圖中顯示兩個方面:

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

架構(gòu)層:模塊化->組件化->插件化->沙盒/雙開技術(shù),比如可以雙開微信,類似Docker, 每個頁面都是插件,類似Vue.js中每個頁面都是組件。

性能優(yōu)化

簡單來說,一個APP 是需要從三個方面被關(guān)注的,業(yè)務功能、符合邏輯的交互、性能響應。如果我們在使用一個 APP 時候,經(jīng)?;瑒訒r經(jīng)??D、時不時崩潰、有些功能設計簡直非常規(guī),比如在 Web 網(wǎng)站有樹層級等面包屑點擊,你非要在手機也搞一個類似樹級點擊加載,那是不是有點強人所難了,我上拉下拉、左滑右滑不行嗎,非要通過點擊才行嗎?那么性能優(yōu)化核心是什么呢?追求快、穩(wěn)、省、小,關(guān)注卡頓、內(nèi)存泄漏和崩潰、代碼質(zhì)量和邏輯、安裝包大小四個方面。想進一步的了解的話,可以查閱下筆者這篇文章《Android APP 性能優(yōu)化的一些思考

APP安全

APP從代碼安全、到傳輸安全,再到存儲安全。代碼可以通過混淆、加固來保證、傳輸安全基本基于加密算法和Token來保證傳輸?shù)奈ㄒ恍浴⒋鎯貌豢赡婕用芩惴ㄟM行設置、所以掌握一些密碼學理論尤為重要,起碼要知道哈希散列算法,對稱加密和非對稱加密等一些常見的加密算法。

基礎(chǔ)進階

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

持續(xù)集成

持續(xù)集成編譯環(huán)境是敏捷開發(fā)中很重要的一個組成部分,它能夠有效地提高整個團隊的生產(chǎn)效率,最大化的減少人為的出錯的可能。比如,通過代碼的持續(xù)提交,可以減少代碼合并的痛苦,更快地與其他人代碼集成,通過集成編譯,能夠及早地發(fā)現(xiàn)代碼庫存在的錯誤,并支持產(chǎn)品、測試等人員及時取包進行功能驗證,所以對于Git、Gradle工具、Jenkins服務器需要掌握起來。

開發(fā)語言

今年可以說是 Kotlin 年,在 Google IO 之后 Kotlin 著實風光了一把,開發(fā)者對于效率的追求是 Kotlin 如此受歡迎的最大原因,而它的勢頭也很不錯,跨平臺的野心讓更多人有了使用它的理由,如今看起來,它甚至比 Swift 更有前途。既然 Kotlin 已然成為 Android 世界的頭等公民,與 Java 完全兼容,我們有什么理由不去擁抱它呢。

大前端

其實移動端開發(fā)也是屬于前端開發(fā),只不過原來我們所指的前端往往都是Web的前端開發(fā)人員,開發(fā)的是網(wǎng)站,而移動端何嘗不是一種展示載體,同樣有入口,只不過相比網(wǎng)站端移動端具體天然的可移動性、可便捷性等特性。隨著 H5 興起,原生能實現(xiàn)的功能同樣在 H5 端也能實現(xiàn),并且在體驗性方面也逐漸提高,并且H5天生就具有動態(tài)性和跨平臺,這也是 H5 能夠一時潮流的原因之一。

設計原則

這些設計原創(chuàng)才是本質(zhì),才是不變的,才是我們需要真正要掌握的,開發(fā)語言特性、開發(fā)框架發(fā)展實在是太快了,我們更不上,不是有這么一句話嗎,封裝具體變化的,抽象起來就行,去追尋哪些不變的內(nèi)容。掌握一種設計模式其實也就掌握一種解決方案,這些都是前人總結(jié)的知識結(jié)晶,基本都是基于特定領(lǐng)域解決特定的問題,我們需要學會在前人肩膀上解決問題。

服務端開發(fā)

最近微服務火的一塌糊涂,雖然我們基本是做移動端開發(fā),但是基于全棧發(fā)展的趨勢,對于服務端開發(fā)勢必要了解,可能沒有實戰(zhàn)項目讓你真刀真槍的干,但是對于微服務的結(jié)構(gòu)理論、服務與服務之間通信、聚合是什么樣的流程也是需要有所耳聞,在自己擅長領(lǐng)域深入專研的同時橫向擴展關(guān)注也是需要的,不能關(guān)起門來閉門造車,兩耳不聞窗外事那是不行的。

閱讀源碼

對于Android源碼和第三方庫源碼閱讀,可以根據(jù)自己感興趣的類型,選擇相應的源碼庫或模塊,給自己約定一個時間點,看完之后最后有個流程圖,哪些是核心類,類與類之間都有什么關(guān)系,這些開源代碼實現(xiàn)的機制是什么,用到哪些解決思想,這些要點最終可以通過文章輸出,我覺得輸出倒逼輸入是一種很不錯的學習方式。

移動AI

AI,也稱人工智能,1956年,在達特茅斯學院舉行的一次會議上正式確立了人工智能的研究領(lǐng)域。會議的參加者在接下來的數(shù)十年間是AI研究的領(lǐng)軍人物,他們中有許多人預言,經(jīng)過一代人的努力,與人類具有同等智能水平的機器將會出現(xiàn)。現(xiàn)在來看AI這個概念很早就存在了,之前沒發(fā)展很大原因是基礎(chǔ)設施不夠完善、研究成本高,現(xiàn)在能夠大力發(fā)展是基于我們的網(wǎng)絡帶寬變大、計算機性能提升、計算成本降低等等因素備齊了。AI是需要通過算法來落地,那么對于算法理論背景就是數(shù)學,所以想進階AI開發(fā),就需要去學習相關(guān)數(shù)學知識,特別是線性代數(shù)和概率論這兩門,是支撐很多算法的理論知識。

小結(jié)

總的來說,技術(shù)發(fā)展能推動社會的進步,解放生產(chǎn)力,進而提高人的社會生產(chǎn)效率,創(chuàng)造價值。技術(shù)落地是需要商業(yè)應用場景配合,如何配合呢,就是通過每個不同商業(yè)模式來實現(xiàn)。最終一門技術(shù)是需要與具體使用業(yè)務緊密結(jié)合起來,如果脫離技術(shù)談業(yè)務顯得空洞,脫離業(yè)務談技術(shù)顯得偏理論,最好是兩者相結(jié)合。這也就要求我們這些從事軟件開發(fā)人員在追求技術(shù)積累的同時要注重業(yè)務積累,讓業(yè)務驅(qū)動技術(shù)發(fā)展,用技術(shù)手段來解決實際業(yè)務問題,在技術(shù)積累中,辨別哪些是不變的道,哪些又是一時流行的而已,這就需要練就一雙火眼金睛了。


轉(zhuǎn)自:https://www.cnblogs.com/cr330326/p/8395424.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,217評論 25 708
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,048評論 2 59
  • 威海是個雪窩,那彪悍的大雪似乎從未缺席過。今年,也如約而至。 那天的雪是下午開始下起來的,突然某一瞬就好像是從天上...
    隨之_而來閱讀 369評論 2 1
  • 誰不是一邊熱愛生活一邊又不想活了呢? 年少時想著有一日自己會成為神話一般的人物,可惜現(xiàn)實一點點的打壓,最后活成了泥...
    鳳墨啊閱讀 421評論 0 1
  • 如風舒竹閱讀 277評論 2 1

友情鏈接更多精彩內(nèi)容