Android--學習路線指南

原文網址:http://blog.csdn.net/singwhatiwanna/article/details/49560409前端

前言

看到一篇文章中提到「最近幾年國內的初級Android程序員已經不少了,可是中高級的Android技術人才仍然稀缺「,這的確不假,從我在百度所進行的一些面試來看,找一個適合的高級Android工程師的確不容易,通常須要進行大量的面試才能挑選出一個比較滿意的。爲何中高級Android程序員很少呢?這是一個問題,我很差回答,可是我想寫一篇文章來描述下Android的學習路線,指望能夠幫助更多的Android程序員提高本身。因爲我也是從一個菜鳥過來的,因此我會結合個人我的經歷以及我對Android學習過程的認識來寫這篇文章,這會讓這篇文章更加真實,而並不是紙上談兵。java

個人工做經歷

前面說到,我也是從一個Android菜鳥過來的。其實這句話放在任何人的身上都是適用的,即你們都是一步步過來的,所以做爲初學者也沒必要由於技術差而鬱悶,同理,高手也不要看不起一些所謂的菜鳥,由於這不公平,技術只有在同等的工做年限上才具備必定的可比性,也許你眼中的菜鳥只是個工做半年的新手,而你已經工做5年,可想而知,這根本不具備可比性,搞很差別人5年後能夠達到比你更高的技術高度。android

我有若干個技術QQ羣,羣裏(481798332)的小夥伴對個人工做經歷比較感興趣,恰好在這裏我就作下介紹。我是碩士研究生畢業,我已經工做3年零3個月了,職位上從最開始的騰訊初級工程師變成了如今的百度Android資深工程師。最開始我並非作Android的,先是作了半年的C++,接着作了3個月的Web前端,而後公司內部轉崗作Android到至今,純Android工做年限的話實際上是2.5年。可是我認爲個人Android工做經驗(注:工做年限不等同於工做經驗)不止2.5年,我投入大量的業餘時間在Android開發上,而且我習慣去思考問題、總結問題並將其融會貫通,所以個人Android技術在短期內有了很大的提高。程序員

在Android學習過程當中,初學者踩過的坑我也都踩過,我也深深地知道你們在學習過程當中最棘手的問題是什麼。舉個例子,在3年前,我想在SlidingMenu中放入一個ListView,發現兩者老是不能很好地一塊兒工做,這確定是因爲滑動衝突的問題,我也知道,可是不知道怎麼解決。我就去學校圖書館翻遍了全部的Android書籍,無果。你們確定都知道緣由,爲何我沒法從書中查找到問題的答案,由於入門書不講滑動衝突,所謂的高級編程書也不講。還有一個問題,我曾經覺得view.post(runnable)可讓runnable的run方法在線程中執行,因此我就在run方法裏面去作耗時的操做,如今想一想我當時是多菜啊,所以我曾經也是菜鳥。面試

直到若干年後的某一天,我終於琢磨透了滑動衝突的事,而後我就把解決問題的思想寫在了CSDN博客上,可是好像看得人並很少,不少人並不能體會個人用心,後來我博客的訪問量愈來愈大,這才慢慢地獲得了一些人的關注。後來有一天我有了寫書的契機,我想到了我最開始學習Android時所踩過的坑,想到滑動衝突對個人困擾,爲了更好地傳播個人技術經驗,爲了讓更多的人少踩一些坑,爲了讓更多地人成爲Android高級工程師,我毅然決定將Android開發中最重要的、最疑難的、最容易困擾你們的、成爲高級工程師所必備的知識點和盤托出,這就是《Android開發藝術探索》存在的緣由以及意義。書的反響怎麼樣呢?從目前讀者的評價來看,內容基本無差評,我收到了不少讀者的確定以及感謝,這說明不少人可以理解個人用心。算法

說了那麼多,言歸正傳,下面說下Android學習路線的話題,本文打算從4個階段來對Android的學習過程作一個全面的分析,分別爲Android初級、中級、高級以及資深工程師,具體請看下面的分析。同理,本篇學習路線仍然只針對Android應用開發,不針對Rom開發和逆向工程等。這裏虛擬一位「小明」的角色,在這裏小明就是Android初學者的表明。編程

初級工程師

小明以前徹底沒接觸過Android開發,是個應屆生,他的待遇是13k,而後小明以校招的身份進入了百度,而後小明須要怎麼學習才能成爲初級工程師呢?這個時候,小明對編程基礎、數據結構C語言都有必定基礎,Java語法什麼的也都掌握的比較好,Android纔有java語言,無奈的是小明並不會搞Android。設計模式

小明首先須要購買一本Android入門的書籍,爲了更快地學習Android,小明業餘時間也都用來一邊看書一邊照着書中的例子敲代碼,結果2周時間小明就把這本書學了一遍。看完這本書後,小明對Android的歷史、結構、代碼規範等都有了一個大概的瞭解,而且,小明已經能夠寫出一些簡單的Activity了。這個時候在小明眼裏,Android開發很簡單很好玩,經過在xml中擺放一些按鈕文本框什麼的就能夠作一些界面了。性能優化

小明開始跟着他的技術導師作需求,一些簡單的小需求小明天然是不在話下了。忽然有一天來了一個需求,該需求要求小明在Activity中爲一個button加一個動畫效果,小明慌了:「徹底沒接觸過,書上也沒有講,怎麼辦呢?」小明冷靜了下,打開了百度搜索,輸入「Android 動畫」,打開前幾個連接,小明恍然大悟,照着網上的例子把需求給實現了。後來導師告訴他:「學好Android,官方文檔是必須看的,既全面又權威」。而後小明如獲至寶,花了一年時間把上面的guide和training都看了一遍,而且他還動手抄了幾個小例子。微信

有一天,小明又須要作一個動畫相關的需求,這可難不倒小明,它熟練地打開了www.baidu.com,輸入「Android 動畫」,忽然他楞了一下:」總不能每次寫動畫都要百度一下吧!「,因而他在CSDN開了一個博客,把動畫相關的知識點都寫上去,爲的是後面再寫動畫相關的代碼就不用百度去搜了,事實如何呢?後面再寫動畫相關的代碼,小明的確不用再去百度搜了,由於經過寫一篇動畫博客,他把動畫相關的細節都已經記住了,這樣他就能夠不用再去參考任何文檔了,後來小明還學會了把一些瑣碎的不方便放在博客上的東西寫到了印象筆記上面,何時忘了10秒鐘之內均可以快速找回來,而不是花10分鐘去再次搜索一遍。

這裏總結一下,Android入門的時候,須要有一本入門書,好好學習書中的內容,同時花一年時間把Android官方文檔中的training和guide看一遍,同時經過寫博客和記筆記的方式來作總結,建議讓本身的每篇博客都有價值些。經過一年時間的學習,相信每一個人均可以達到中級工程師的水平。

技術要求: 
- 基本知識點 
好比四大組件如何使用、如何建立Service、如何進行佈局、簡單的自定義View、動畫等常見技術 
- 書籍推薦 
《第一行代碼 Android》、《瘋狂Android》

中級工程師

小明通過一年的努力學習終於成爲Android中級工程師了,月薪變成了17k。到了中級工程師,已經能夠在公司裏幹不少體力活了,可是一些很重要的任務小明還不能一我的承擔起來,這個時候小明須要學習的內容就不少了,以下所示: 
- 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內核剖析》

資深工程師

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

相關文章
相關標籤/搜索