前言前端
移動研發火熱不停,愈來愈多人開始學習android開發。但不少人感受入門容易成長很難,對將來比較迷茫,不知道本身技能該怎麼提高,到達下一階段須要補充哪些內容。市面上也可能是談論知識圖譜,缺乏體系和成長節奏感,特此編寫一份android研發進階之路,但願能對你們有所幫助。vue
這篇文章裏,咱們只談技術,不談軟技能。java
在這裏我把攻城獅分紅初級、中級、高級和資深四個階段,分別對研發設計能力、工具使用、系統原理和架構等做出要求。react
初級android
我對初級研發攻城獅的定義是掌握基礎的android知識,可以獨立完成一個功能。這個層級大部分人經過看一些資料書籍再通過項目練習很快能夠達到。git
須要的技能有:數據庫
掌握android 四大組件知識,深刻了解相關生命週期;對於Application、Fragment、Intent也必須掌握。小程序
掌握android 基本佈局和控件的屬性和使用,經常使用佈局有LinearLayout\RelativeLayout\ConstraintLayout等,控件有TextView\ImageView\RecyclerView\ScrollView等。後端
對android的資源訪問使用有基本瞭解,瞭解android針對不一樣國家、語言、屏幕、API的適配原理。設計模式
掌握android系統服務和工具類的使用,對網絡訪問和數據庫操做有基本認知。
熟練掌握研發工具,如IDE、模擬器、網絡代理、日誌等。
中級
而到達中級就須要付出一些努力了,須要瞭解更多知識,能夠仿照開源庫去造輪子練習。中級工程師要可以熟練完成功能研發。須要的技能有:
熟悉SOLID基礎設計原則,掌握23種設計模式。
對於研發語言特性java/kotlin有深刻理解,如反射、動態代理、apt等。
對android架構有基礎瞭解,對apk結構和打包原理有深刻了解。
對於android各個版本特性有基本瞭解,如MD設計、權限管理、doze模式等。
熟練掌握各類研發調試工具,如git、gradle、mat、layout inspector等。
掌握Handler\AsyncTask原理,熟悉多線程開發。
對繪頁面制原理有初步理解,可以實現一個複雜自定義控件。
可以熟練掌握開源庫的使用,如圖片庫(Glide\Fresco)、網絡庫(Volley\okhttp\Retrofit)、工具(Dagger\RxJava\EventBus)等。
熟悉圖片優化經常使用方法,避免編寫內存泄漏的代碼。
高級
若是到達中級,那麼恭喜你已經能夠應付大部分狀況了。但要能更進一步,就須要深刻理解android系統的運行原理,達到融會貫通,能夠做爲android端上的架構師。
掌握java高級特性,如JUC、線程池、NIO\BIO等;掌握jvm虛擬機知識,如內存模型、GC原理、類加載機制、線程模型等。
對android運行環境有深刻理解,理解android沙盒機制,掌握AIDL原理及Binder通訊原理,瞭解app和activity啓動原理。
掌握熱修復原理,各大廠商方案的優缺點。
對於android事件分發有深刻理解,重點掌握觸摸事件機制。
深刻理解android繪製原理,理解VSYNC和surface機制和窗口原理。
深刻理解android動畫原理,包括補間動畫和屬性動畫。
對於android安全機制有基本認知,理解android安全原理。
深刻理解端上設計範式思想,如mvc\mvp\mvvm\clean-arch等。
理解架構演進,有良好的分層和拆分思路,掌握模塊化、插件化、動態部署等。
對新技術敏感,理解掌握下一代架構dynamic feature等。
至此,android端研發你已經爐火純青,可以面對各類狀況,達到泰山崩於前而色不變的境界。若是還想繼續前進,就須要突破技術棧,從更高架構層次考慮問題。
資深
而到了資深層次,技術棧已經再也不是阻礙。可以從更高層面看待問題,理解整個系統的設計,做爲系統架構師的角色存在。
理解微服務、SOA思想,對於後端開發有必定涉獵。
瞭解前端研發工具和思想,知道vue react等研發框架。
深刻理解跨端技術,如phonegap、weex/RN flutter、小程序快應用等。
後記
但願你能對照上面的知識圖譜,彼此印證查缺補漏,不斷在技術道路上前行。有什麼疑問和建議歡迎一塊兒探討。