Android 從入門到資深學習路線

一個老鳥發的公司內部整理的 Android 學習路線

有一些鏈接可能還不是特別準確,歡迎大家評論指出,會及時更正。圖片參考:另一份 Android 開發學習路線圖 

  1. 基礎工具部分: 中文手冊,我猜測是Maven中文手冊,可是我並沒有找到這樣的資源,歡迎知道的朋友告訴我;

  2. Android部分有 『第三方庫集合』,我沒能找到資源地址;

  3. 書籍我大多是給的豆瓣鏈接,如果覺得不合適可以替換一下;

程序設計

一、java

(a)基本語法(如繼承、異常、引用、泛型等)

(b)多線程、併發

  • Java併發編程實戰 (系統全面的介紹了Java的併發,如何設計支持併發的數據結構)

(c)Java 7

(d)Java 8

(e)Java虛擬機

(f)性能優化

二、算法與數據結構

  • 算法時間複雜度、空間複雜度的基本認知

  • 熟悉常用數據結構:鏈表、隊列、散列表、樹等;

  • 遞歸、分支等基本思想;

  • 常用算法應用:排序、查找、比較等

三、操作系統

  • 對Linux/OS的基本認知

  • Linux的常用命令

四、網絡

  • Http/Https

  • TCP/IP

五、Android

  • 四大組件(服務、廣播、ContentProvider、頁面容器)

  • 基礎UI組件(ListView、ViewPager)

  • 異步任務機制(AsyncTask、Handler、線程池)

  • 佈局優化(層級、繪製、碎片化處理)

  • 圖片加載(Bitmap、緩衝區)

軟件工程

一、基礎工具

IDE、Git、Maven

二、軟件質量

  • 代碼整潔

  • 碼質量

  • 碼重構

三、設計模式

23種常見設計模式

四、敏捷開發









第一階段:Java面向對象編程


1.Java基本數據類型與表達式,分支循環。 


2.String和StringBuffer的使用、正則表達式。 


3.面向對象的抽象,封裝,繼承,多態,類與對象,對象初始化和回收;構造函數、this關鍵字、方法和方法的參數傳遞過程、static關鍵字、內部類,Java的垃極回收機制,Javadoc介紹。 


4.對象實例化過程、方法的覆蓋、final關鍵字、抽象類、接口、繼承的優點和缺點剖析;對象的多態性:子類和父類之間的轉換、抽象類和接口在多態中的應用、多態帶來的好處。 


5.Java異常處理,異常的機制原理。 


6.常用的設計模式:Singleton、Template、Strategy模式。 


7.JavaAPI介紹:種基本數據類型包裝類,System和Runtime類,Date和DateFomat類等。

 

8.Java集合介紹:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合類API。 


9.Java I/O輸入輸出流:File和FileRandomAccess類,字節流InputStream和OutputStream,字符流Reader和Writer,以及相應實現類,IO性能分析,字節和字符的轉化流,包裝流的概念,以及常用包裝類,計算機編碼。 


10.Java高級特性:反射、代理和泛型。 


11.多線程原理:如何在程序中創建多線程(Thread、Runnable),線程安全問題,線程的同步,線程之間的通訊、死鎖。 


12.Socket網絡編程。


第二階段:Android開發

中級工程師

這個時候需要學習的內容就很多了,如下所示: 
- AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別; 
- Binder:從Java層大概理解Binder的工作原理,懂Parcel對象的使用; 
- 多進程:熟練掌握多進程的運行機制,懂Messenger、Socket等; 
- 事件分發:彈性滑動、滑動衝突等; 
- 玩轉View:View的繪製原理、各種自定義View; 
- 動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理; 
- 懂性能優化、熟悉mat等工具 
- 懂點常見的設計模式

學習方法

閱讀進階書籍,閱讀Android源碼,閱讀官方文檔並嘗試自己寫相關的技術文章,需要有一定技術深度和自我思考。在這個階段的學習過程中,有2個點是比較困擾大家的,一個是閱讀源碼,另一個是自定義View以及滑動衝突。

如何閱讀源碼呢?這是個頭疼的問題,但是源碼必須要讀。閱讀源碼的時候不要深入代碼細節不可自拔,要關注代碼的流程並儘量挖掘出對應用層開發有用的結論。另外仔細閱讀源碼中對一個類或者方法的註釋,在看不懂源碼時,源碼中的註釋可以幫你更好地瞭解源碼中的工作原理,這個過程雖然艱苦,但是別無他法。

如何玩轉自定義View呢?我的建議是不要通過學習自定義view而學習自定義view。爲什麼這麼說呢?因爲自定義view的種類太多了,各式各樣的絢麗的自定義效果,如何學的玩呢!我們要透過現象看本質,更多地去關注自定義view所需的知識點,這裏做如下總結: 
- 搞懂view的滑動原理 
- 搞懂如何實現彈性滑動 
- 搞懂view的滑動衝突 
- 搞懂view的measure、layout和draw 
- 然後再學習幾個已有的自定義view的例子 
- 最後就可以搞定自定義view了,所謂萬變不離其宗

大概再需要1-2年時間,即可達到高級工程師的技術水平。我個人認爲通過《Android開發藝術探索》和《Android羣英傳》可以縮短這個過程爲0.5-1年。注意,達到高級工程師的技術水平不代表就可以立刻成爲高級工程師(受機遇、是否跳槽的影響),但是技術達到了,成爲高級工程師只是很簡單的事。

技術要求: 
- 稍微深入的知識點 
AIDL、Messenger、Binder、多進程、動畫、滑動衝突、自定義View、消息隊列等 
- 書籍推薦 
《Android開發藝術探索》、《Android羣英傳》

高級工程師

小明成爲了夢寐以求的高級工程師,月薪達到了20k,還拿到了一丟丟股票。這個時候小明的Android水平已經不錯了,但是小明的目標是資深工程師,小明聽說資深工程師月薪可以達到30k+。

爲了成爲Android資深工程師,需要學習的東西就更多了,並且有些並不是那麼具體了,如下所示: 
- 繼續加深理解”稍微深入的知識點“中所定義的內容 
- 瞭解系統核心機制: 
1. 瞭解SystemServer的啓動過程 
2. 瞭解主線程的消息循環模型 
3. 瞭解AMS和PMS的工作原理 
4. 能夠回答問題”一個應用存在多少個Window?“ 
5. 瞭解四大組件的大概工作流程 
6. … 
- 基本知識點的細節 
1. Activity的啓動模式以及異常情況下不同Activity的表現 
2. Service的onBind和onReBind的關聯 
3. onServiceDisconnected(ComponentName className)和binderDied()的區別 
4. AsyncTask在不同版本上的表現細節 
5. 線程池的細節和參數配置 
6. … 
- 熟悉設計模式,有架構意識

學習方法

這個時候已經沒有太具體的學習方法了,無非就是看書、看源碼和做項目,平時多種總結,儘量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關於設計模式的學習,最近一本新書推薦給大家《Android 源碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android源碼中的設計思想,我最近也在閱讀此書。

技術要求: 
- 稍微深入的知識點 
- 系統核心機制 
- 基本知識點的細節 
- 設計模式和架構 
- 書籍推薦 
《Android開發藝術探索》、《Android 源碼設計模式解析與實戰》、《Android內核剖析》

資深工程師

這個階段的程序員也許並沒有太具體的學習路線了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章