目錄
- 核心分析內容
- 1、學什么
- 1.1、Android基礎 & 常用
- 1.2、Android進階
- 1.3、與時俱進、熱門技術
- 1.4、編程語言:Java與Java虛擬機
- 1.5、計算機基礎
- 1.6、總結
- 2、怎么學
- 2.1、學習路徑:如何循序漸進、階段性的學習Android的理論知識?
- 2.2、獲取途徑:有哪些高效的方式獲取Android理論知識?
- 2.3、學習方式:用什么方式記錄?
- 2.4、總結
- 3、怎么應用Android知識?
- 3.1、該如何尋找項目?
- 3.2、如何將理論知識運用到項目中 & 提高項目的質量
- 具體執行建議
- 總結
核心分析內容
對于怎么學習Android,主要解決的是3個問題:學什么
、怎么學
& 怎么用
。
具體如下:
下面,我將帶著上述幾個問題,詳細講解自身學習Android的方法和Android學習路徑。最后,還會結合前面內容,給出綜合的具體執行學習Android的建議。
1、學什么
面向Android初、中級開發者,對于要學習的Android理論知識,我認為主要包括:
Android基礎 & 常用
Android進階
與時俱進、熱門技術
編程語言
計算機基礎
具體介紹如下:
1.1、Android基礎 & 常用
針對Android基礎&常用知識,按照優先級最主要的知識點主要包括:四大組件
、布局使用
、多線程
& 動畫
。
具體介紹如下:
類型 | 簡介 | 具體內容 |
---|---|---|
四大組件 | Android最基礎、最常用的四個組件 | ? 活動(Activity) ? 廣播(Broadcast) ? 內容提供者(ContentProvider) ? 服務(Service) |
布局使用 | 常用UI布局組件 | ? 框架布局(FrameLayout) ? 線性布局(LinearLayout) ? 絕對布局(AbsoluteLayout) ? 相對布局(RelativeLayout) ? 表格布局(TableLayout) ? 約束布局(ConstraintLayout) |
多線程 | 多線程操作、異步通信 | ? Thread、Runnable ? Handler ? AsyncTask ? IntentService ? HandlerThread |
動畫 | 實現UI中的動畫效果 | ? 補間動畫 ? 屬性動畫 ? 幀動畫 ? 差值器 & 估值器 |
1.2、Android進階
針對Android進階知識,按照優先級最主要的知識點主要包括:自定義View
、性能優化
。
具體介紹如下:
類型 | 簡介 | 具體內容 |
---|---|---|
自定義View | 自定義試圖組件 & 動畫 | ? 自定義View流程(measure、layout、draw) ? 時間分發機制 ? 自定義動畫 & 組件 |
性能優化 | 性能優化的目的是為了讓應用程序App更快、更穩定 & 更省電 | ? 內存優化 ? 內存泄漏 ? 繪制優化 ? 布局優化 |
1.3、與時俱進、熱門技術
除了基礎日常使用的Android知識,我們還需時刻關注行業動態,與時俱進的學習新技術,如近些年來較為熱門的Android新興技術包括:Flutter
、熱修復
、插件化
等;
同時,了解 & 學習常用的開源庫也十分重要,常用的開源庫主要包括 圖片加載
、網絡請求
、 異步處理
的開源庫。
具體類型如下:
類型 | 簡介 | 具體內容 |
---|---|---|
圖片加載 | 加載顯示圖片 | ? glide ? fresco ? picasso ? Android-Universal-Image-Loader |
網絡請求 | 與服務器快速實現網絡請求 | ? Retrofit ? okhttp ? volley |
異步處理 | 快速實現異步通信、響應式編程 | ? RxJava ? RxAndroid ? RxBinding ? EventBus |
1.4、編程語言:Java與Java虛擬機
Android是基于Java的,所以學習Java和Java虛擬機(JVM)十分重要。
學習Java不需要類似后端那么深入,我認為作為Android開發者,學習的內容包括:語言特性
、基礎使用
、集合類
和機制
。
具體介紹如下:
類型 | 簡介 | 具體內容 |
---|---|---|
語言特性 | Java特有的語法特性 | ? 面向對象的3個特征與含義 ? 多態的實現原理 ? 基本數據類型、相關操作和封裝類 ? 4種引用:強、軟、弱、虛 & 應用場景 |
基礎使用 | Java常見的使用類/方法 | ? 基本數據類型、相關操作和封裝類 ? Object類、String類、抽象類(Abstract) ? Static關鍵字 ? 接口(Interface) |
集合類 | Java中與集合相關的類 & 使用 | ? Collection類、Arrays類 ? List、Set、Queue、Stack、Map的特點與用法 ? Vector、ArrayList、LinkedList的存儲特性 & 區別 ? Map相關:HashMap、LinkedHashMap、TreeMap、HashTable、ConcurrentHashMap |
機制 | Java特定機制的使用 | ? 多線程:Thread與Runnable、ThreadLocal、線程池ThreadPool ? 線程同步:sychronized、同步鎖(sychronized) ? 反射 ? JNI ? IO與NIO ? 泛型 |
對于Java虛擬機(JVM),屬于底層 & 原理性的內容,具體介紹 & 學習的內容包括:
1.5、計算機基礎
除了學習Android特定技術外,對于程序員來說,最基本的計算機基礎素養也十分重要的,主要包括 數據結構
、 算法
和 計算機網絡
。
具體介紹如下:
類型 | 簡介 | 具體內容 |
---|---|---|
數據結構 | 相互之間存在一種或多種關系的數據元素的集合 | ? 線性表&特殊線性表(棧和隊列) ? 樹、二叉樹 ? 串、字符串 ? 圖 ? 查找 ? 排序 |
算法 | 解決特定問題的求解步驟 | 對應每種數據結構的多種常見算法 |
計算機網絡 | 網絡通信相關 | ? 計算機網絡體系結構(5層 & 7層) ? TCP / IP協議、UDP協議 ? HTTP協議 ? Socket |
1.6、總結
至此,關于入門Andriod需學習的內容講解完畢,總結如下:
2、怎么學
對于怎么學習Android知識,此處分為3個子問題:
學習路徑
:如何循序漸進、階段性的學習Android的理論知識?獲取途徑
:有哪些高效的方式獲取Android理論知識?學習方式
:用什么方式記錄?怎么樣去記錄?
下面將具體介紹:
2.1、學習路徑:如何循序漸進、階段性的學習Android的理論知識?
- 既然已經知道要學習哪些內容了,下面,該解決的是:
學習路徑,即什么階段該學習什么內容
。 - 對于Android知識學習階段,
我認為是和Android開發水平相結合的
,只要掌握了哪部分知識,就代表你處于Android開發的哪個階段。 - 我將Android開發水平分為:
初、中、高 & 高級以上
。
具體對應的知識內容如下:
類型 | 定義 | 知識 & 能力范疇 | 特點 | 具體內容 |
---|---|---|---|---|
初級 | 最基礎的Android知識 | ? 定性認識:知識的了解 ? 定量使用:知識的實際使用 | ? 基礎 ? 廣度 | ? Android基礎使用(如四大組件) ? Android常見機制(如多線程、動畫等) ? Java ? 編程通用:數據結構、算法、網絡 |
中級 | 基礎學習中更深一步的探索 | ? 高級應用 ? 源碼分析 ? 新技術的使用 | ? 深度 ? 與時俱進 | ? 底層工作機制的原理 ? 自定義View ? 性能優化 ? 熱定技術:開源庫、熱修復、插件化 |
高級 | 專注于某一垂直領域(如音視頻、性能優化) | 特定領域的知識深入 | ? 某一垂直領域 ? 機具深度 & 門檻 | 專注解決特定領域的技術問題 |
高級以上 | 技術專家 | 繼續深入研究特定領域 | 更加深入某一垂直領域 | ? 專注解決特定領域的技術問題 ? 會產出 & 開源庫 & 組件 |
高級以上 | 架構師 | 在更高的層面解決項目難點 / 業務問題 | 專注于整體技術架構 | ? 技術架構設計 ? 具體業務的解決方案 |
高級以上 | 管理層 | 面向團隊、業務 & 產品 | 具備管理團隊、統籌產品方向的屬性 | ? 管理能力 ? 業務能力 ? 產品能力 |
2.2、獲取途徑:有哪些高效的方式獲取Android理論知識?
既然已經知道要學習哪些內容了,下面,我將列舉一些學習這些理論知識的有效途徑。
對于獲取Android知識,我認為最有效的途徑是:書籍
> 視頻
> 技術博客
> 公眾號
。
具體介紹如下:
類型 | 特點 | 應用場景 | 推薦 |
---|---|---|---|
書籍 | 具備完整知識體系、講解全面的獲取知識途徑 | 成知識體系、循序漸進的學習 | ? Android:《第二行代碼》、《Android開發藝術探索》 ? Java:《Java編程思想》 ? JVM:《深入理解Java虛擬機》 ? 數據結構:《大話數據結構》 ? 算法:《劍指Offer》、Leetcode網站刷題 ? 計算機網絡:《計算機網絡》(第五版) |
視頻 | ? 更加生動、清晰的講解知識 & 實踐 ? 較大的缺點:耗費時間較長 | 學習難度較高的知識 | 在線學習網站對應的Android學習課程(極客學院 & 慕課網) |
技術博客 | 針對某個知識點進行講解 | 目的性搜索、深入學習 | ? 技術社區:CSDN、稀土掘金、簡書 |
公眾號 | 針對某個知識點進行講解(由于鑲嵌在微信,所以容易鏈接到外部更多的渠道) | 適合碎片化學習 | Android公眾號 |
關于通過公眾號的學習,本人的微信公眾號:carson帶你解析Android,希望能讓大家系統的學習上述說的Android理論知識。
2.3、學習方式:用什么方式記錄?
很多人看完書籍看完博客后當時很理解,但過一段時間就十分容易忘記。
所謂“好記性不如爛筆頭”,我認為,最好的記錄方式就是將學習到的知識記錄下來,我強烈推薦:撰寫技術博客。
對于技術博客的介紹如下:
撰寫技術博客好處多多,主要包括:
好處 | 具體描述 |
---|---|
提高開發效率 | ? 復雜使用的流程化:記錄下繁雜的使用流程,下次再次使用時按部就班直接復用即可,常見的有:開源庫的使用、某類需求的具體實現過程 ? Bug的快速解決:記錄下問題發生的場景 & 解決方案,不僅能避免重復采坑,就算采坑了也能快速解決 |
保證真正的掌握知識 | ? 只有做到以下3步我才認為是真正掌握了知識:敲代碼實現、清晰表達 & 讓別人聽懂 ? 但大部分開發者都停留在第一步(敲代碼實現),你得清楚明白:敲代碼實現 & 用語言表達出來是兩碼事 ? 所以在整個過程中是非常能鍛煉自己的思維能力 & 表達能力 |
加深對知識的思考 | ? 在寫作過程中,你會不斷思考知識的各個方面 為什么?因為如果思考的廣度 & 深度不夠,文章是沒法繼續寫下去的 ? 這大概也是很多人沒法堅持下來的原因:因為牽一發而動全身,知識總是從1個點擴散到整個面的,最終需完成的文章內容遠遠超出你的想象 |
保證知識的正確性 | ? 自己的認知能力有限,所以對知識的理解總有偏差 ? 當分享出來博客后,良好的Android技術社區氛圍能及時糾正你錯誤的理解,保證你的認知是正確的 |
當然,還有一些其他福利,如:
好處 | 具體描述 |
---|---|
提供影響力 | 當大量產出優質文章后,在Android領域的知名度 & 影響力就會提高、對自己在職場上的地位會有所幫助,這是一種莫大的榮譽感 |
結識人脈 | 相對其他職業來說,程序猿較為封閉,即對電腦多、面向人較少;通過博客、Github等這些公開渠道,能結識更多的開發者 |
知識共享 | Android與IOS其中一個較大區別 = 開源,作為一名Android開發者,應秉著谷歌、Android開源的精神,將有用的知識分享給大家、幫助更多的Android開發者 & 共同學習,推進整個Android技術圈的進步 |
2.4、總結
3、怎么應用Android知識?
- 理論結合實踐、學以致用才能更好地獲取知識,對于深入理解Android,最好的實踐就是 將理論知識運用到Android項目中
- 所以,此處可以轉化成兩個問題:
- 該如何尋找項目?
- 如何將理論知識運用到項目中 & 提高項目的質量
下面我將詳細回答這兩個問題
3.1、該如何尋找項目?
此處我給出3個方向:
學校
:課程設計、社團組織公司
:實習、正職、創業技術社區
:開源項目
方向 | 具體 |
---|---|
學校 | ? 課程設計:請認真對待大學專業對于你職業相關課程的大作業(如Java、Android、數據結構),因為它可能會成為你一個不可多得的項目經驗 ? 社團組織:多參與校內官方組織 & 社團組織,注重尋找具備校內影響力較大的產品的所屬組織,因為在那里你能找到一個具備落地實踐的開發經歷 & 一群靠譜、能在職場上給予你很多幫助的開發團隊 |
公司 | ? 實習:如果你還是在校大學生,請安排好自己的大學上課時間,嘗試出去公司參與擁有大量用戶、真正的項目,特別是知名公司,對于在校大學生來說,這部分項目經歷是含金量的提高。 ? 正職:如果你已經是正職員工,那么做好手頭上的項目是你實踐最好的方式。 ? 創業:這是能最大程度鍛煉你全方面的能力,含:技術專業能力 & 基礎能力;但這是一個可遇不可求的機會:找到靠譜的團隊 & 有前景的方向,若有這樣的機會,個人非常建議去嘗試;假設最后能拿到投資,含金量是非常非常高、最能鍛煉人的。 |
技術社區 | ? 來源:自己的項目、當前技術熱點/開源庫、仿照主流的app; ? 內容:完整App、某個功能模塊、UI組件等; ? 開源處:主流技術社區 = Github、CSDN、稀土掘金、簡書 |
3.2、如何將理論知識運用到項目中 & 提高項目的質量
我認為,**項目中的所有功能 & 業務實現都是基于上述說的Android知識的,關鍵是在于:**是否能選擇對的知識點 & 組合實現思路。
提高項目質量,即提高項目含金量、增加技術含量 & 亮點,下面主要是從項目**本身的意義
、實現方式
、性能優化
** & 影響力
4個方面
類型 | 具體 | 備注 |
---|---|---|
意義 | 盡可能的讓自己的項目使用的技術往學習到的知識點靠攏 | |
實現方式 | ? 具備一定的技術難點 & 技術技巧,而不是簡單實現 ? 如:使用了某種新技術、新的開源庫 | 若無難點,要學會自己去制造難點 |
性能優化 | 對項目在性能上提出要求 & 提出解決方案 | 與同類項目、一般要求的區別開來 |
影響力 | 盡可能讓項目可落地 & 具備一定的用戶基數; ? 具備一定的影響力 & 知名度 |
具體執行建議
個人認為最高效的執行方式是:以做項目為主、知識體系學習為輔,將技術博客作為一種學習的方式。
具體理解的是:
總結
至此,關于我對Android學習內容、方向 & 具體實踐方式 講解到這里,此處作個簡單總結:
憑借這樣的學習方式,有幸獲得騰訊、阿里巴巴、今日頭條等Android客戶端offer,所以,我將自己的一套Android學習方式總結出來分享給大家,希望各位也能獲得心儀的offer!