一個老鳥發的公司內部整理的 Android 學習路線
有一些鏈接可能還不是特別準確,歡迎大家評論指出,會及時更正。圖片參考:另一份
Android 開發學習路線圖
-
基礎工具部分: 中文手冊,我猜測是Maven中文手冊,可是我並沒有找到這樣的資源,歡迎知道的朋友告訴我;
-
Android部分有 『第三方庫集合』,我沒能找到資源地址;
-
書籍我大多是給的豆瓣鏈接,如果覺得不合適可以替換一下;
程序設計
一、java
(a)基本語法(如繼承、異常、引用、泛型等)
-
Java核心技術 卷I(適合入門)
進階
-
-
Effective Java中文版(如何寫好的Java代碼)
-
Java解惑 (介紹爛Java代碼是什麼樣的)
-
(b)多線程、併發
-
Java併發編程實戰 (系統全面的介紹了Java的併發,如何設計支持併發的數據結構)
(c)Java 7
-
Java程序員修煉之道 (詳細的介紹Java 7 的新特性)
(d)Java 8
(e)Java虛擬機
-
深入理解Java虛擬機 (並不是那麼難,Java程序員都該看看)
(f)性能優化
-
Java性能優化權威指南 (後面的章節好像用處不大,前面有些部分還是值得看)
二、算法與數據結構
算法時間複雜度、空間複雜度的基本認知
熟悉常用數據結構:鏈表、隊列、散列表、樹等;
遞歸、分支等基本思想;
常用算法應用:排序、查找、比較等
三、操作系統
對Linux/OS的基本認知
Linux的常用命令
-
Linux內核設計與實現(原書第3版) (很精煉的語言描述清楚了內核算法)
四、網絡
Http/Https
TCP/IP
五、Android
四大組件(服務、廣播、ContentProvider、頁面容器)
基礎UI組件(ListView、ViewPager)
異步任務機制(AsyncTask、Handler、線程池)
佈局優化(層級、繪製、碎片化處理)
圖片加載(Bitmap、緩衝區)
-
UniversalMusicePlayer (通過學習一個音樂播放器的代碼能很快了解四大組件)
-
Android UI/UX庫(各類常用組件及擴展組件的集合)
-
The Google I/O 2015 Android App (Google大會官方的App,適合學習各類實現)
-
Android開發技術前線 (定期翻譯、發佈國內外Android優質的技術、開源庫、軟件架構設計、測試等文章)
-
進階
-
第三方庫集合 (列舉了常見的各方向第三方庫)
-
軟件工程
一、基礎工具
IDE、Git、Maven
二、軟件質量
代碼整潔
碼質量
碼重構
-
編寫可讀代碼的藝術 (來自Google工程師,專注於代碼可讀性)
-
代碼整潔之道(使用面向對象+敏捷開發原則編寫清晰可維護的代碼)
-
重構-改善既有代碼的設計 (學習改善已有代碼)
-
重構手冊 (改善代碼的實際操作)
三、設計模式
23種常見設計模式
-
Head First設計模式(兩本入門級的設計模式書籍)
- 進階
-
設計模式-可複用面向對象軟件的基礎(設計模式在實際中的應用)
-
四、敏捷開發
- 進階
五、專業開發
-
序員職業素養
-
更高效、更實效
六、思考人生
-
黑客與畫家 (硅谷創業之父Paul Craham 的文集,主要介紹黑客及優秀程序員的愛好和動機)
附安卓學習資料:
【推薦幾本好書】Dev程序員書籍下載排行榜(內附技術大牛強烈推薦書籍)
GitHub 上排名前 100 的 Android 開源庫介紹(上)
-
第一階段: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內核剖析》
資深工程師
這個階段的程序員也許並沒有太具體的學習路線了。