一个大神的Android成长之路
這篇文章是我的一個朋友寫的,總結了這些年的技術成長之路,我覺得對于很多技術人都有借鑒的作用,技術是相通的,不要整天想一口氣吃成一個胖子,不積跬步無以至千里,既然選擇了技術這條路,就不畏艱辛,苦中有甜,甜中有苦,我看了小二哥的總結,自己也覺得很羞愧,我看書的毅力沒有二哥這樣強。
每個人的學習方法可能存在一些差異,但是目的都是一樣的,你覺得你看書很容易進入狀態,那就去看書,如果你看視頻很容易進入狀態,那就去看視頻,如果你動手操作很容易進入狀態,那就買開發板回來研究。但是,一定要有自己的積累。
下面文章中的我,指的是作者王小二C。
前言
我是一個已經接近6年工作經驗的Android工程師,我想通過分享一下個人的成長之路,幫助大家可以少走一些彎路,或者有一些新的啟發。
2014年2月-2015年1月:
當時我是大四下半學期,公司希望我去實習,因為我之前是做javaweb方向的,所以我在寒假里差不多7天時間,學完了《瘋狂android講義》,剛開始實習,主要是解決bug,這時候改一個UI的字符串的異常,就已經很開心了,正好有同事要離職,他把一個已經開發差不多的APP交給我開發,這個時候我漸漸掌握了自定義控件,動畫,Handler,四大組件的基礎用法。由于是在手機廠商工作,所以也有了APK編譯流程的概念,了解源碼下編譯APK和Eclipse編譯的相似之處。
2015年2月-2015年5月:
去印度出差,增長了很多見識,也是第一次知道什么叫native crash,發現高通工程師分析log的能力非常強,這個時候我對整個android系統有了一丟丟的概念。最關鍵是了解到高通在手機廠商中角色。
2015年5月-2017年5月:
從印度回來之后,我被分配到了FWK組,主要是負責手機的穩定性,這個時候就會有大量的crash,手機重啟等問題,漸漸的對system_server進程,開機流程,開機動畫,zygote進程,Input子系統有了一些概念,幸運的是我參加了一個有關于VR的項目,讓我對SurfaceFlinger有了一定的概念,但是這個時候說實話,我對native開發能力,也就能看看代碼,有時候還看不明白,而且找了好多資料,都無法掌握native的開發能力,而且我持續不斷的在學Binder機制,但是總是感覺沒有學明白,老羅的《Android系統源代碼》無數次的打開,又失望的合上。
2017年6月-2018年6月:
我認真的研究JNI,等研究完JNI之后,我發現不管是Binder機制,還是原來一些看不大懂的FWK的native代碼,也能看懂了,還有Looper源碼也更加理解了,但是說讓我去開發一個native的程序,還是有一點虛的
2018年6月-2019年6月
我開始慢慢接觸Linux kernel,復習C語言,慢慢的了解了Linux的一些IO復用機制例如Epoll機制,跨進程通信例如socket通信,pipe,匿名共享內存,對Binder驅動也差不多理解了百分之70,一下子把我前幾年所學的知識串聯起來了。
Looper:Epoll + Pipe
Input子系統:Socket + Epoll + Binder機制
Surface GUI:Binder + 匿名共享內存
虛擬機的fork:Socket
2019年6月-至今
我開始正式學習Linux kernel,主要方法是IO方向,正好學習了VFS,也看了Linux驅動開發的書籍,一下子發現了差不多完全理解Binde機制,而且通過Binder機制反過來了解Linux的進程管理,內存管理,同步鎖等,我又看了《程序員的自我修養》這本書,對一個C語言程序在Linux系統上運行的狀態,有了一個充分的了解,一下子我發現自己把整個Kernel+Fwk+App都打通了。腦海中可以浮現出整個手機運行狀態的每個進程,每一個線程在干嘛。
借用gityuan的一段話描述我目前的一個狀態:
Android系統之博大精深,包括Linux內核、Native、虛擬機、Framework,通過系統調用連通內核與用戶空間,通過JNI打通用戶空間的Java層和Native層,通過Binder、Socket、Handler等打通跨進程、跨線程的信息交換。只有真正閱讀并理解系統核心架構的設計,解決問題和設計方案才能做到心中無劍勝有劍,才能做到知其然知其所以然。當修煉到此,恭喜你對系統有了更高一個層次的理解,正如太極劍法,忘記了所有招式,也就練成了太極劍法。
再回過頭去看看那些API,看到的將不再是一行行代碼、一個個接口的調用,而是各種信息的傳遞與交互工作,而是背后成千上萬個小蝌蚪的動態執行流。記得《俠客行》里面的龍木二島主終其一生也無法參透太玄經,石破天卻短短數日練成絕世神功,究其根源是龍木二島主以靜態視角去解讀太玄經,而石破天把墻壁的圖案想象成無數游動的蝌蚪,最終成就絕世神功。一言以蔽之,程序代碼是死的,系統運轉是活的,要以動態視角去理解系統架構。
未來
目前我的主要工作是負責android手機的性能優化,kernel的IO優化,我發現工作那么多年,只能說目前的自己真正有能力去研究一些東西了,自己的知識體系已經建立起來了,可以添磚加瓦了。
這些年我看過的書
但是我還是推薦這五本書
目前在看的書
總結
1.從APP層-FWK層-Kernel層打通的難度和周期遠遠大于Kernel層-FWK層-APP層,我就是屬于前者,走了太多的彎路,后者的發展之路,我相信會比我快很多,gityuan就是屬于后者。
2.Binder機制一定能要研究,否則你基本不可能可以打通整個android系統??邕M程通信,跨線程通信都是我們需要去仔細研究的。
3.你可以不精通C++,但是一定要達到Linux C語言的開發能力,其實我們缺的不是Android NDK的能力,而是缺的是Linux C的開發能力。
4.多看看書,我文章中用了好多次的一下子,整個一下子真的是一下子頓悟了,因為我之前已經有大量知識的積累了,所以捅破窗戶紙,就可以豁然開讓,當然我的同事也很牛逼,也幫我捅破的很多窗戶紙。
5.多去回答同事和網友的問題,在一次次回答問題,被反問中,你自己對知識的理解會不斷的加深。
6.當你發現自己不懂的知識越來越多的時候,證明你懂的知識越來越多。
掃碼或長按關注
回復「?籃球的大肚子」進入技術群聊
總結
以上是生活随笔為你收集整理的一个大神的Android成长之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python分布式定时任务_分布式定时任
- 下一篇: python 定时任务 全局变量_APS