淺談Android進階之路

過去十年是移動互聯(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è)那么還是從事服務(wù)端開發(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),我們都知道下一個風(fēng)口是 AI饥努,但是作為一個移動開發(fā)者如何在即將來臨的 AI 時代吃口紅利呢捡鱼。我的回答是:致力于做一個終身學(xué)習(xí)者,追本溯源去探尋代碼世界哪些不變的道酷愧,你又會說了堰汉,哪些是道呢,簡單舉例下伟墙,比如編程思想、常用的設(shè)計模式滴铅、設(shè)計原則戳葵、算法和數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)通信機制汉匙、操作系統(tǒng)拱烁、重構(gòu)原則、架構(gòu)思維等等噩翠。同時在目前發(fā)展情形下戏自,也越來越趨向全棧工程師的路線,借用之前在網(wǎng)上看到一篇文章的圖伤锚,想進階全棧工程師之路看需要哪些技能擅笔,如下:


全棧工程師技能

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

進階之路

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

看張圖:


Android高級進階

挑些圖中幾個點簡單來談?wù)勛约旱囊恍┫敕ā?/p>

移動架構(gòu)

移動架構(gòu)是 2017 移動技術(shù)年度TOP5話題之一但惶,從中就體會到架構(gòu)是有多火耳鸯,記得剛開始學(xué) Android 時候,哪有現(xiàn)在那么框架膀曾,那時候談架構(gòu)的更多是在服務(wù)端開發(fā)片拍,比如多層架構(gòu),有展示層妓肢、業(yè)務(wù)邏輯層捌省、數(shù)據(jù)訪問層這就是最簡單的三層模式,Android系統(tǒng)則是基于事件驅(qū)動響應(yīng)機制設(shè)計的單頁面架構(gòu)碉钠,其實跟瀏覽器中的窗口頁面是一樣的纲缓, 系統(tǒng)中一直有個消息輪詢監(jiān)聽機制卷拘,哪個事件被觸發(fā)了,相應(yīng)的響應(yīng)代碼進行處理祝高,這些處理操作是被提前注冊到系統(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è)務(wù)功能胸嘁、符合邏輯的交互、性能響應(yīng)凉逛。如果我們在使用一個 APP 時候性宏,經(jīng)常滑動時經(jīng)匙捶桑卡頓毫胜、時不時崩潰、有些功能設(shè)計簡直非常規(guī)诬辈,比如在 Web 網(wǎng)站有樹層級等面包屑點擊酵使,你非要在手機也搞一個類似樹級點擊加載,那是不是有點強人所難了焙糟,我上拉下拉口渔、左滑右滑不行嗎,非要通過點擊才行嗎穿撮?那么性能優(yōu)化核心是什么呢缺脉?追求快痪欲、穩(wěn)、省攻礼、小业踢,關(guān)注卡頓、內(nèi)存泄漏和崩潰礁扮、代碼質(zhì)量和邏輯知举、安裝包大小四個方面。想進一步的了解的話太伊,可以查閱下筆者這篇文章《Android APP 性能優(yōu)化的一些思考

APP安全

APP從代碼安全雇锡、到傳輸安全,再到存儲安全倦畅。代碼可以通過混淆遮糖、加固來保證、傳輸安全基本基于加密算法和Token來保證傳輸?shù)奈ㄒ恍缘汀⒋鎯?yīng)用不可逆加密算法進行設(shè)置欲账、所以掌握一些密碼學(xué)理論尤為重要,起碼要知道哈希散列算法芭概,對稱加密和非對稱加密等一些常見的加密算法赛不。

基礎(chǔ)進階

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

持續(xù)集成

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

開發(fā)語言

今年可以說是 Kotlin 年醒串,在 Google IO 之后 Kotlin 著實風(fēng)光了一把,開發(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 能夠一時潮流的原因之一沉帮。

設(shè)計原則

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

服務(wù)端開發(fā)

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

閱讀源碼

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

移動AI

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

小結(jié)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眠蚂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斗躏,更是在濱河造成了極大的恐慌逝慧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啄糙,死亡現(xiàn)場離奇詭異笛臣,居然都是意外死亡,警方通過查閱死者的電腦和手機隧饼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門沈堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桑李,你說我怎么就攤上這事踱蛀。” “怎么了贵白?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵率拒,是天一觀的道長。 經(jīng)常有香客問我禁荒,道長猬膨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任呛伴,我火速辦了婚禮勃痴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘热康。我一直安慰自己沛申,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布姐军。 她就那樣靜靜地躺著铁材,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奕锌。 梳的紋絲不亂的頭發(fā)上著觉,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音惊暴,去河邊找鬼饼丘。 笑死,一個胖子當(dāng)著我的面吹牛辽话,可吹牛的內(nèi)容都是我干的肄鸽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屡穗,長吁一口氣:“原來是場噩夢啊……” “哼贴捡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起村砂,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤烂斋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后础废,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汛骂,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年评腺,在試婚紗的時候發(fā)現(xiàn)自己被綠了帘瞭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒿讥,死狀恐怖蝶念,靈堂內(nèi)的尸體忽然破棺而出抛腕,到底是詐尸還是另有隱情,我是刑警寧澤媒殉,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布担敌,位于F島的核電站,受9級特大地震影響廷蓉,放射性物質(zhì)發(fā)生泄漏全封。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一桃犬、第九天 我趴在偏房一處隱蔽的房頂上張望刹悴。 院中可真熱鬧,春花似錦攒暇、人聲如沸土匀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恒削。三九已至,卻和暖如春尾序,著一層夾襖步出監(jiān)牢的瞬間钓丰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工每币, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留携丁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓兰怠,卻偏偏與公主長得像梦鉴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子揭保,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,072評論 25 707
  • 因為“買票回家”肥橙,突然記起那些我也出門在外的事。秸侣。存筏。。味榛。 那時候我們剛剛畢業(yè)椭坚,不甘心拿著畢業(yè)證回到來的地方,于是在...
    青蛙公主_閱讀 154評論 0 0
  • 很多朋友說搏色,以后結(jié)婚隨便找個會過日子的人就行了善茎,愛不愛不重要、胖瘦不重要频轿、美丑也不重要垂涯,女的能生娃烁焙,男的會掙錢就行...
    廿易閱讀 397評論 9 14
  • 其實我是個沒有耐心的人考阱,只讓我一個待著,我也可以待一整天鞠苟。其實,我的愛好就是睡覺秽之,是個永遠睡不飽的噬睡鬼当娱,睡醒了玩...
    芽尖閱讀 319評論 0 1
  • 花期不再 茂非 今年櫻花又開了 昨夜小雨綿綿 輾轉(zhuǎn)難眠 ...
    茂非閱讀 368評論 0 5