
程式員這個行業,日新月異,技術體系更新速度快,新技術新框架層出不窮,所有的技術都像是一個無底洞,當你學得越多就會發現不懂的越多,不懂的越多,需要學習的就更多,
因此,一旦選擇了這個行業,就意味著你必須不斷學習才能跟得上大家的腳步,而要想成為一名優秀的程式員,更是需要通過正確的方法,設定正確的目標來進行不斷地學習,
為了幫助部分同學解決一些學習上的困惑,今天我就來分享和探討下我的一些學習經驗,大家如果有什么意見或建議,歡迎在評論中留言,
一、Android學習路上踩過的坑和各種瓶頸總結
對于大多數學生來說,對于IT專業的學生來說,現在正在面對各大IT企業的秋招,很多人會成為從0開始的Android實習生,在Android初學之路上,每個Android實習生都會遇到各式各樣的瓶頸,
克服瓶頸要從克服自己對一切瓶頸的偏見做起,把逃避瓶頸的行為變成享受瓶頸帶來的樂趣的程序,要知道喜力比國產啤酒貴好多的一條重要原因就在于喜力的瓶頸:你現在去買一瓶玻璃瓶裝喜力,用手握住瓶頸,大拇指按住那顆星,然后用你最熟悉的動作擼瓶頸,你會喜歡這種手感的,
1、Android布局和螢屏適配
Android初學者遇到的第一個瓶頸就是Android 布局的撰寫,首先Android的layout是用XML寫的,而大多數大學生在大學階段學習網頁制作,都是用HTML繪制基本控制元件,然后用CSS進行頁面美化;而Android卻用XML繪制界面,style也是用XML寫,學習XML最重要的熟能生巧,多練習練習就順手了,另外XML和HTML有很多相似的地方,比如padding與margin的區別都是一樣的,
此外Android系統碎片化嚴重,不同型號的手機有著不同的螢屏尺寸和不同的解析度,為了解決這個問題,我們可以把背景貼圖做成.9png格式,并且用內容和padding撐起控制元件,如果需要適配的機型實在太極端,我們可以百分比布局解決這個問題——PercentRelativeLayout和PercentFrameLayout等,
2、不同組件的生命周期
Android初學者遇到的第二個瓶頸就是生命周期,Android的生命周期主要有Activity生命周期、Fragment生命周期、Service生命周期三種,學不好Activity的生命周期,你做不好界面跳轉的特效,也做不好系統Activity(相機等)的回呼;學不好Fragment的生命周期,你寫不出惰性加載;學不好Service的生命周期,你連后臺運行都做不到,學習生命周期,要記住“文無圖時少直觀,圖無文時難入微”,用圖表輔助記憶,
3、網路請求和json決議
Android是移動互聯網的重要組成部分,網路請求和Json決議是Android學習中的重要環節,很多初學者會在此處遭遇瓶頸,
為了突破這個瓶頸,初學者應該先選擇合適的框架以盡快解決實習作業中的問題,常用的網路請求框架有Volley和OKHttp等;常見的json決議框架有Gson和Jackson等,如果你的求職目標是阿里巴巴集團,學習一下FastJson是可以助你一臂之力的;此外還有把網路請求和json決議整合到一起的Retrofit,
實習生初入企業,要記住用作業時間解決作業中的問題,知識的探索和能力的提升要利用自己的業余時間,下班后要學習以上框架的原始碼和實作原理,比如Android的網路請求必須在子執行緒中進行,否則會造成NetworkOnMainThreadException;現在的網路請求都是基于HttpURLConnection的,任何大談HttpClient的資料都是過時的;還要弄清楚Handler的原理、ThreadPool的原理、AsyncTask的原理等;json決議方面的知識還有JSONObject和JSONArray的區別、Java的泛型機制、Java的反射機制等等,
4、圖片加載和記憶體優化
Android機的價位一般比iPhone低得多,所以Android系統比iOS系統更容易遇到記憶體溢位問題(OutOfMemoryError,簡稱:OOM),這也是初學者常見的學習瓶頸之一,OOM最多發于圖片,其次布局中嵌入的地圖、視頻等吃記憶體大戶也是OOM的罪魁禍首之一,
解決加載圖片的OOM應該先選擇Picasso、Glide、Fresco等框架以盡快解決作業中的問題,然后利用個人時間學習Android快取機制——LruCache和DiskLruCache;地圖、視頻的OOM應該在界面被回收時清除控制元件、停止服務;其他的OOM應該用弱參考和軟參考解決,
5、RecyclerView
Android最常用也是最復雜的控制元件是RecyclerView(2014及以前的資料是ListView),因為滑動沖突、串列中資料修改等問題都會在RecyclerView中體現,為了克服這些瓶頸,必須要搞清楚RecyclerView.Adapter(也包括以前的BaseAdapter)的作業原理,ViewHolder的作業原理,以及ViewGroup的事件分發機制等內容,這些內容不下大力氣學習是不能完全掌握的,
克服了以上瓶頸后,估計實習生也該到了畢業轉正的時間了,進階路上還有新的瓶頸,新瓶頸有新的玩法:這種玩法需要雙手操作,如果用另一只手按住打開著的瓶口擼瓶頸,你可以一邊擼一邊使勁搖,玩HIGH的時候突然松開按住瓶口的手,
6、自定義控制元件
Android自帶的控制元件不能滿足太復雜的界面控制元件需求,因此繪制自定義控制元件也是Android工程師的必備技能,繪制自定義控制元件需要掌握View的幾個常見方法的重寫,如onDraw()、onMeasure()、onLayout()等;對事件分發機制的了解也應該比RecyclerView更精熟;此外還需要掌握Canvas和Animator的相關知識,Android的Canvas和HTML5的Canvas有很多相似性,可以以此突破Canvas的學習瓶頸,
7、行程間通信
不同App之間以及同一個App的不同行程之間需要多行程通信,多行程通信在視頻播放等占用大量資源的場合是很有必要的,行程間通信的初學者百度“多行程”會被AIDL繞得云里霧里,其實你只要試試Messenger框架,一切行程間通信的難題都會迎刃而解,
8、Android性能全面優化和crash分析
Android初學者會遇到的最后一個瓶頸是Android性能全面優化,前面提到的Android記憶體優化是Android性能優化中最重要的部分,但也只是一小部分,Android性能優化還包括安裝包體量優化、GUI繪制優化、電量和流量優化等,
GUI方面可以利用ViewStub和去掉其他不必要的背景來避免OverDraw;安裝包體積可以用壓縮圖片、去除重復且無用的依賴等方式進行優化;電量和流量可以通過用推送代替輪詢、用GZIP檔案格式下載過長的資料流等方式進行優化,
在移動應用性能方面,崩潰(Crash)帶來的影響是最為嚴重的,Crash指App在運行程序中出現大段用戶正在進行的操作的強制關閉現象,Crash會造成關鍵業務中斷、產品口碑變差、用戶流失等問題,Crash可以用UncaughtExceptionHandler捕捉,也可以利用UMeng和Bugly等服務分析,請注意:如果打算跳槽到阿里,就用UMeng,想要跳槽到騰訊,就用Bugly,
突破了上述所有瓶頸以后,Android程式員的技術水平都可以達到獨當一面的程度,甩掉了初學者帽子的程式員會發現頭頂不再是瓶頸,而是從技術到管理的天花板,

二、成為 Android 大牛的10大獨門秘籍
成為一個 Android 開發者不難,想成為一個鶴立雞群、卓爾不凡的高手卻難上加難,想成為絕世高手,要投入大量的時間、精力與專注,要耐得住寂寞、受得了挫折,上得了刀山、下的去火海......這條高手之路沒有捷徑,有多少付出就會有多少回報,
老司機在這里整理為你了一份 Android 高手10大必經之路,讓你少走彎路,快速走上人生巔峰,
1. 深入了解 Android 開發框架
我指的不是檔案,而是要深入了解實際的 Android 框架代碼,大多數開發者不敢深入了解Android 框架內部,就像一個只會做簡單改裝、卻不了解汽車內部構成的所謂”汽車工程師”一樣,不要害怕,這是成為開發高手的必經之路,隨著深入了解,你會驚喜的發現程式運行背后的原理,
2. ”讀”更多更多的代碼
大多數開發者并沒有花太多時間閱讀其他人的代碼,他們大部分時間在重復自己熟悉的代碼,
但這并不能讓你成為一個優秀的開發者,想做到更好,就要多讀其他優秀開發者的代碼,你應該多讀開源軟體代碼,通過讀代碼你將發現許多編碼技巧、以及你從未了解過的功能與實作方式,
3. 學更多的語言
再多學一些編程語言,你應該跟上行業發展的趨勢,不要將自己局限在 Android 的小世界中,在學習新語言的同時,你會擴展自己的視野,也會相應反過來提升你的 Android 開發技術,每年都學習一門新語言吧,
小技巧:如果你不知道從哪門語言開始,就選Python吧,作為人工智能時代崛起的語言,現在已經成為熱門語言,相關職位需求和薪酬也是水漲船高,如果不想說Python,那就學Javascript吧!
4. 學習 Java 設計模式
我不想再強調設計模式對于你的安卓開發生涯有多么重要,當你在解決編程問題時碰到瓶頸,設計模式都是你最好的救星,
開始認真學習設計模式,在其他開發者說起Factory, Decorator, 或者Facade pattern時,你要知道他們在說什么,好吧,從現在開始,每周學習一種新設計模式,直到你掌握絕大部分,
5.為開源社區作出貢獻
如果你開發了一個插件、庫或者其他有用的代碼,并且已經使用在你的app中,去貢獻到開源社區吧,將專案開源、并且維護自己的開源專案,你將從中受益良多,在開源專案中,你將成為一名更優秀、更高端的開發者,
如果沒有可開源的專案,你可以考慮為感興趣其他專案作貢獻,修復漏洞、完善檔案、寫一些測驗等等,很小的一點貢獻,對于開源專案維護者來說是一個很大的幫助,
6. 定制你的IDE
花一點時間了解你正在使用的開發環境:Android Studio,IDE能做到比你想到的更多的事情,他里面隱藏著大多數開發者所不知的功能和快捷鍵,多了解你的開發環境,這會極大提高你的作業效率,
7. 學習更簡潔的 Android 編碼標準
學習編碼標準,在一個團隊開發時代,維持簡潔的編碼標準會讓你受益匪淺,當然,這不是復雜的火箭發射流程,你只需花很少的時間就可了解Android編碼標準,
8. 花點時間學習 Android 最佳實踐
學習 Android開發的最佳實踐,了解建議與禁忌將幫助你成為更好的開發者,當然更能讓你的app 獨樹一幟,
9. 學點設計
如果你想成為全能開發者,你應該花點時間學習并理解UI和UX,這會幫助你從新的角度看待你的代碼,
小技巧:讀讀這本<設計心理學>,了解設計的原理,
10. 加入Java和Android架構圈
作為一個Android 開發者,必須要加入一個Android架構學習圈,在里面,Android 大牛云集,高手過招!大家一起互相學習交流技術問題,讓你一步一步成為Android高手,助你進階為Android架構大牛,

三、Android進階之路
技術的學習是個榷訓月累,由量變到質變的程序,按照上述的方法,并且能夠持之以恒地學習下去,經過幾年的歷練,你已經可以超越大部分程式員了,
但是要想成為一名不被淘汰的真正的大牛級程式員,卻還有很長的路要走,
想要不被淘汰意味著什么?意味著你寫的東西需要足夠核心,并且很難被年輕人替代,如果僅僅停留在使用某門技識訓是框架上,隨著年齡的增長,你的自身價值是會越來越低的(如果轉管理,那就另說了)!
如果有心繼續深耕技術的同學,可以參考下下面我作業幾年收集總結出來的Android學習路線:
1、看視頻進行系統學習
前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰斗機,也正因為Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的,我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面,關于視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時,
另外,我自己也珍藏了好幾套視頻,有需要的我也可以分享給你,
2、進行系統梳理知識,提升儲備
客戶端開發的知識點就那么多,面試問來問去還是那么點東西,所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度,so,出去面試時先看看自己復習到了哪個階段就好,
- 架構師筑基必備技能:深入Java泛型+注解深入淺出+并發編程+資料傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO
- Android高級UI與FrameWork原始碼:高級UI晉升+Framework內核決議+Android組件內核+資料持久化
- 360°全方面性能調優:設計思想與代碼質量優化+程式性能優化+開發效率優化
- 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網路訪問框架設計+RXJava回應式編程框架設計+IOC架構設計+Android架構組件Jetpack
- NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發
- 微信小程式:小程式介紹+UI開發+API操作+微信對接
- Hybrid 開發與Flutter:Html5專案實戰+Flutter進階
知識梳理完之后,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結,

主要內容:
Java 基礎(★★)
- 面向物件思想
- 多型
- 例外處理
- 資料型別
- Java 的 IO
- 集合
- Java 多執行緒
Java 高級(★★)
- Java 中的反射
- Java 中的動態代理
- Java 中的設計模式&回識訓制
- Java 的類加載器
Android 基礎(★★★)
- Android 基本常識
- Activity
- Service
- BroadCastReceiver
- ContentProvider&資料庫
- Android 中的布局
- ListView
- JNI & NDK
- Android 中的網路訪問
- Intent
- Fragment

Android 高級(★★★)
- Android 性能優化
- Android 螢屏適配
- AIDL
- 自定義控制元件
- Android 中的事件處理
- Android 簽名
- Android 中的影片
- 網路協議
- 其他
3、讀原始碼,看實戰筆記,學習大神思路
“編程語言是程式員的表達的方式,而架構是程式員對世界的認知”,所以,程式員要想快速認知并學習架構,讀原始碼是必不可少的,閱讀原始碼,是解決問題 + 理解事物,更重要的:看到原始碼背后的想法;程式員說:讀萬行原始碼,行萬種實踐,
主要內含微信 MMKV 原始碼、AsyncTask 原始碼、Volley 原始碼、Retrofit原始碼、OkHttp 原始碼等等,

4、面試前夕,刷題沖刺
面試的前一周時間內,就可以開始刷題沖刺了,請記住,刷題的時候,技術的優先,演算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎么會問,
關于面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

以上內容均免費分享給大家,需要完整版的朋友,點這里可以看到全部內容,或者點擊 【這里】 查看獲取方式,
當你有了學習線路,學習哪些內容,也知道以后的路怎么走了,理論看多了總要實踐的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278425.html
標籤:其他
