Android 開發進階指南

以前有人在朋友圈評論我說,如今學習Android 遇到了瓶頸,基本上通常的API,市面上大部分App UI 都能作出來,該怎麼提升?而後我回復他了,我學習Android 也有一年左右,也是個菜鳥,也遇到這樣的問題,因此就各類查資料,看看大神們都在研究什麼技術,也跟着學習學習。當初在逛知乎看到了一些問題(PS:逛知乎仍是頗有好處的嘛!!!),看到不少回答就以爲很受啓發,還有看別人的博客,也很受用,想要寫一篇文章的想法,等了一兩週纔開始動手。 html

新手學習遇到瓶頸 java

我以爲新手作的更可能是重複的工做,可能接觸好的項目,前一兩個月會以爲學到好的東西,可是隨着公司的東西慢慢熟悉,也就變成日復一日的重複勞動,而後慢慢感受也就學習遇到了瓶頸,而一些太難的東西又不太情願去琢磨,好比讀Android 源碼,你使用Handler Loopeer 感受很巧妙,能夠仔細研究一下;還有就是不少第三方開源庫你使用起來很方便,若是這個時候你仔細閱讀源碼,也必定能感覺它的設計的巧妙。所以,我多方蒐集,整理出來瞭如下幾條,有必定經驗接下來要作的事。 android

  • 解決問題的能力。可能老手的遇到的Bug 可能比你寫的代碼都多。 git

  • 閱讀和理解源碼。新手可能就是使用API,而老手會去閱讀源碼,理解開源項目或者Android 系統的源碼,理解他們的架構。 程序員

  • 深刻理解Java 和Android 。Android 應用層的東西基本上基於Java,想要寫好Android,Java 已經要過關。 github

  • 瞭解編譯原理等CS基本知識。我以爲這一條是每一個程序員應該必備的。好比像計算機網絡(HTTP,TCP/IP),算法與數據結構。
    下面我會分別按照這幾點給你們詳細講解(實際上是來看看大牛們的演講)。 面試

解決問題的能力 算法

我以爲這個我沒有能力回答,不過以前有幸聽過一個演講,@阿拉神農 鄧凡平老師在北京GDG DevFest 的一個演講,說過你進入一個項目組,不要害怕問題和Bug,你把不少問題解決了,你的技術也會上升到一個層次。鄧老師在文中也提到了怎麼學,學到什麼程度,以及學什麼,還專門提到多線程,網絡(HTTP,TCP/IP)編程,設計模式這些基礎東西,就算Android 有一天不行了,這些東西也同樣會被吸取借鑑的。
關於演講的內容:《Android開發進階之旅》
http://weibo.com/1826440077/D36AAiF2G。 編程

注:鄧老師從事軟件開發有十餘年,以前是作底層開發,如今在作應用層的開發,他也是《深刻理解Android》系列書籍的主要做者之一。 設計模式

閱讀和理解源碼

這個問題我也沒有多大能力去回答,也讀過一些開源庫的源碼,像Retrofit,Volley,還有像Handler Loopeer 的機制,其餘的雖然閱讀過,可是沒有理解太深,這也是我之後努力的方向。還有人問問什麼要讀源碼,我想說,若是你寫寫XML 佈局文件,會用用API,一個實習生兩三個月就和你差很少了,你還有什麼資歷說你頗有經驗,知其然知其因此然說的就是這樣的意思,閱讀和理解源碼讓你更好使用API,解決問題的能力也大有提升,也有了造輪子的能力。固然了跳槽面試的時候也能夠吹牛逼了。

下面的兩篇文章是Kaede 的博客上兩篇文章,他也有本身的知乎專欄——《中二病也要開發Android》。Kaede 在文中闡述了,爲何要閱讀Android 源碼,以及該怎麼讀,還有要讀哪些,對於源碼接觸不太多的同窗有個參考,也推薦一些大牛的博客,站在巨人的肩上,有了前人的參考,也會事倍功半的。

深刻理解Java

Java語言相對來講比C++ 簡單不少,可是對於常常寫業務代碼的人,對於如何寫出優雅的java代碼以及如何辨別垃圾代碼,還有Java的內存模型/GC,併發機制,虛擬機執行流程確定不甚瞭解,所以,這個階段,我打算大體搞清楚Java語言自己,順便從這個角度切入編程語言自己;主要以下:
  1. 學習如何寫更好的Java 代碼,《Effective Java》值得一讀。

  2. 什麼樣的Java 代碼是有問題的?《Java解惑》;怎麼改寫代碼?《重構》

  3. 學習一些沒有接觸過的Java 高級庫,NIO/AIO, concurrent/forkjoin等,有機會使用到工做過程當中。

  4. 瞭解Java 虛擬機 《深刻理解Java 虛擬機》《實戰Java 虛擬機》;從這裏,能夠知道不少JVM 的運行原理,內存模型,class 文件格式,Java 併發原理,虛擬機執行引擎等至關多的東西;雖說Android 的虛擬機Dalvik 和ART(ART 也許稱不上虛擬機)使用的不是標準的HotSpot 可是,我相信原理都差很少。

可是,Java平臺的技術棧遠非這麼一點,學無止境;走到這一步,我以爲對於Java語言已經算得上掌握了,因而主要目標轉向編程語言自己。

深刻Android

這一塊有不少人分享過經驗,其實無非那麼幾點,我就簡單重申一下吧。

  1. IPC機制,Binder和匿名共享內存等

  2. 四大組件啓動,工做原理

  3. View系統,繪製原理,事件分發

  4. 動畫框架,原理

  5. 多線程機制,消息機制 AsyncTask,Thread/Handler

  6. 系統啓動過程,system_server啓動過程

  7. Window系統,Window建立過程

  8. 資源管理系統,資源加載機制等

《Android 開發藝術探索》這本書確實不錯,適合中級程序員。我的感受《Android 內核剖析》挺不錯的,雖然有點過期了也買不到書了。 《Android 源碼設計模式》,在Android 的源碼中都有什麼使用哪些設計模式,也讓你更深刻去理解源碼。
當你搞清楚了這些,基本上你寫的什麼代碼在Android 上層是怎麼運做的都瞭然於胸;FrameWork 層的任何問題也攔不住你的腳步了;不過這個階段,僅僅是瞭解了Android 系統Framework 層的原理,對於怎麼寫代碼,對於語言自己,對於Android 系統底層的原理依然很迷惑,沒事,已經看到了光了,一步一步來。

除了Android 源碼值得讀的,還有第三方的開源庫也是值得一讀的,有的開源庫甚至比官方的更加好用,好比像咱們經常使用的Retrofit,OkHttp,Picasso,Volley,EventBus,Dagger,咱們基本上都能熟悉使用,Trinea 和一些大牛在Github 作的一個項目,專門分析了開源項目,咱們能夠參考着來看。

我以爲新手閱讀源碼的姿式仍是有點弱,固然站在巨人的肩膀就會事半功倍,因此看看大牛寫的文章仍是很~(≧▽≦)/~漲姿式的。

瞭解編譯原理等CS基本知識

推薦一下R 大的書單吧:  http://zhuanlan.zhihu.com/hllvm/20130808。  

固然因爲定位不同,我確定不會像他同樣專門搞搞基語言虛擬機(主要是我沒那個水平!),僅供參考;我本身目前看的幾本書以下:《編程語言實現模式》《深刻理解計算機系統》《SICP》《編譯器設計》;而後因爲在學Haskell,因此在追github上一個項目,sdiehl/write-you-a-haskell ;具體怎麼作仍是邊走邊瞧。
後面的我也不敢說太多,目前打算是但願深刻了解Linux內核,之前看過《深度探索Linux 操做系統:系統構建和原理解析》;打算看《深刻Linux內核》《Unix環境高級編程》;只要越過了浮躁期,其實目標仍是很明確的;知道本身該學習什麼,也知道大體該怎麼作;感受本身走在正確的路上,愈來愈接近那個目標,天天都充滿但願。

參考

本文部分章節參考來自weishu 在知乎上面的回答,若是你以爲本文不錯,也能夠點擊連接能夠給打點個贊,在這裏多謝了。

本篇文章可以完成,參考了weishu,鄧凡平老師,kaedea,Trinea,固然也看了不少博客,在這裏特別感謝他們,本人資歷尚且有限,寫過過程當中不免會有疏漏,還請見諒。

相關文章
相關標籤/搜索