注意:文章末尾有學習資料鏈接,搭配文章知識點,與思維導圖學習更快哦!
前言
經常在簡書和微信上收到一些同學的私信,說自己馬上畢業或者已經畢業一年,從事Android開發相關的工作,現在不知道要學習什麼東西了。或者說自己也在摸索着學習,但是不知道學習的路線對不對,感覺很迷茫,想讓我給一些建議。
其實大多數的開發者都有過類似的經歷(我也有過),當自己項目完成、處於維護階段的時候,工作不忙,想自己學習,但是又不知道學什麼?從何學起?東一榔頭西一棒子,最終收穫甚少。然後開始自我懷疑,厭倦學習,從此墮落。
那麼,作爲Android 開發者,該怎樣規劃自己的學習路線,然後一步一個腳印的向中高級進階呢?本篇文章根據自己的一些見解梳理一下。
一、Java基礎
首先,Java作爲Android開發的第一語言(Kotlin普及還需要時間),要想在Android開發中遊刃有餘,就得先打牢Java基礎,Java 基礎有哪些呢?除了一些基本的語法之外,總結了如下一些基礎:
1 . 面向對象的三大特性:
Java 作爲面向對象編程語言,你得知道OOP的的三大特性
封裝、繼承、多態。
2 . 程序設計的6大原則:
- 單一職責原則
- 里氏替換原則
- 依賴倒置原則
- 接口隔離原則
- 迪米特法則
- 開閉原則
瞭解這6大設計原則是非常有必要的,它能指導你的程序整個結構的設計和規範。要想提高你的代碼質量,請熟記這幾個原則。在我們設計類、方法、接口的時候,請遵循這些原則。
3 . 設計模式
- 單例模式 :double check 雙重加鎖方式、靜態內部類方式、枚舉方式。
- 構造器模式
- 模板方法模式
- 裝飾器模式
- 觀察者模式
- 責任鏈模式
- 策略模式
23種設計模式就不一一列舉了,不管你是工作了5年還是工作了1年,學習一下設計模式吧,這有助於打開你的編程思維。
4 . Java 字符串相關
Java 字符串相關的三個類:String
、StringBuilder
、StringBuffer
,你知道他們的區別嗎?這也是面試中比較常問的,如果你還不知道?那就去查查資料吧。
5 . Java 線程池
線程池方面,JDK 爲我們內置了幾種線程池:
newFixedThreadPool:newFixedThreadPool,創建固定大小的線程池,poolCoreSize和maxPoolSize 相等,到達coreSize,則將新的任務放到緩存隊列,有線程執行完畢,直接去取。
newSingleThreadExecutor:newSingleThreadExecutor,創建一個單線程的線程池,核心池的大小和最大池大小都爲1.
newCacheThreadPool:newCacheThreadPool,無大小限制的線程池,提交一個任務就創建一個線程執行。
如果默認的幾種線程池還不能滿足你的需求,那就試一試自定義線程池吧!自定義線程池繼承ThreadPoolExecutor。
Java 基礎總結:關於Java基礎暫時就總結了這些,這些都是Android 開發中比較常用或者常常需要關心的一些東西。如果你想比較系統的學習Java基礎相關的東西,推薦你去看一下經典書籍《Thinking in Java》。
二、Android 基礎
就像建造房屋一樣,要建造一座宏偉的建築,首先得打牢根基。同樣的,作爲Android 開發者,要想走的更遠,也要學好Android基礎。
1 . Android 四大組件
Android四大組件是Android的根本,從我們學習Android 時候,就先認識了它們:
- Activity
- Service
- BroadcastReceiver
- ContentProvider
Activity:
Activity 再熟悉不過了吧,我們APP 所能看到的活動界面就是一個個Activity,說到Activity,我們得知道:
- 1,Activity 的生命週期
-
2,Activity 的幾種啓動方式:
standard
SingleTask
SingleTop
SingleInstance請記住這幾種啓動方式的區別。
3,Activity 間傳如何遞數據?
4,Activity 橫豎屏切換生命週期有哪些變化?
5,顯示Intent 和隱式Intent 有和區別?
Service:
Service 也是我們用得比較多的一個組件,關於Service ,我們需要知道:
Service 的生命週期
-
Service 的兩種啓動方式:
1, startService
2, bindService2種啓動方式 所走的生命週期方法是不一樣的
Service vs IntentService:
Service 和IntentService 個自用於不同的場景,想知道他們各自的使用場景和區別嗎?查資料去吧!
BroadcastReceiver:
廣播相關的知識點:廣播有兩種註冊方式,Manifest 清單文件中註冊和 代碼中動態註冊,代碼中註冊的廣播一般爲局部廣播,最好 register 和 unRegister 成對出現,別忘了反註冊。
全局廣播可以跨應用訪問,存在安全隱患並且效率不高,因此出現了更安全、更高效的替代者:LocalBroadcastReceiver
,使用非常簡單。如果在代碼中看到的是LocalBroadcastReceiver
而不是BroadCastReceiver
,我會給你加分。
ContentProvider
ContentProvider 可能用得不是很多,可以用於共享數據,提供數據源,掌握會寫增刪改查就好了。
囉嗦一下:四大組件需要在清單文件中聲明。
2 . Android 常用的幾種佈局
- 1,幀佈局 FrameLayout
- 2,線性佈局 LinearLayout
- 3,相對佈局 RelativeLayout
- 4,Google 新出的約束佈局ConstraintLayout
3 . Android Studio
Android Studio 是我們Android開發的常用工具,熟練操作和使用上面的快捷鍵和一些插件,對我們的開發效率有很大的幫助。
Android Studio 有很多好用的插件,可以根據自己的需要安裝,如:
- GsonFormat
- Parcelable 序列化
- 翻譯插件:對於英文不是很好的很有幫助。
除了一些好用的插件之外,還可以根據自己的習慣設置一些快捷鍵,總之,工欲善其事,必先利其器。要提高開發效果,先配置好我們的開發工具。
4 . Fragment
- 1,Fragment 的生命週期
- 2,Fragment 與fragment 之間的通訊方式
- 3,Fragment 與Activity 之間的通訊方式
- 4,Fragment + ViewPager 懶加載
- 5,Fragment +TabLayout 選項卡
5 . 數據庫相關
Android 自帶數據庫 Sqlite, 關於數據庫,我們應該熟悉:
1,數據庫和表的創建
2,數據的增刪、改、查。
3,數據庫升級:
這點尤爲重要,因爲數據庫的升級往往伴隨着數據的升級,不能升級之後把前面的用戶數據弄沒了。-
4,三方庫:GreenDao:
如果你覺得自己做這些操作很麻煩的話,你可以選擇你一些三方的庫,如GreenDao,已經爲你封裝了所有的這些操作,只需簡單配置就能使用。當然,Github 上還有很多類似的庫,根據自己的需要選擇。6 . 常用控件基礎控件
1,RecyclerView & ListView
2,ViewPager
3,TextView
4,ImageView
5,Button
6,Checkbox
7,RadioButton
所有複雜的界面都由這些簡單的基礎控件組成,因此,你需要好好了解一下他們的各種屬性。
三、Android 進階
上面列舉了一些Android的基礎知識點,僅僅熟悉這些還不夠,還需要學習Android開發中更高級一點的東西:
1 . View
上面列舉了一些基礎的View和控件,但是這些基礎控件有時候不能滿足我們的需求,這時候就需要自定義View了。
自定義View:
自定義view 的三種方式:
1,組合基礎控件
2,繼承基礎控件,做相應的更改。
-
3,繼承View 或 ViewGroup:
這種方式也是我們用的比較多的一種方式,這種方式比較自由,定製度高,需要實現下面幾個方法
(1)onMeasure()
(2)onLayout()
(3)onDraw()
執行順序爲:onMeasure()
->onLayout()
-> onDraw()
。
View事件分發機制:
自定義view 的時候,我們需要響應用戶的各種事件,這個時候我們就需要了解View的事件分發機制了。
關於事件分發機制,看一張比較經典的圖(U型圖):
當這幾個方法都調用super 的時候,整個事件會走完這個U型圖。
事件分發機制這一塊還是比較難理解的,更多詳解請查資料。
App 的幾種架構
- MVC
- MVP
- MVVM
常見的三種架構,根據自己的業務需要選擇,每種架構都有自己的有點和缺點,另外,我覺得一個APP 中,多種架構是可以並存的,比如:MVC和 MVP 。一個非常簡單的展示界面,不必爲它弄一個 P 層,反而變得複雜了。
3 . Android 動畫
(1) Android 中的5種基礎動畫
- 平移動畫
- 縮放動畫
- 旋轉動畫
- Alpha 動畫
- 幀動畫
(2) 屬性動畫
補間動畫很簡單,但是它的場景使用很有限,它只能對一個View做動畫。有的時候,我們需要更爲精準的控制,我們要控制一個屬性來做動畫,這個時候屬性動畫就派上用場了。屬性動畫的幾個相關類:
- ObjectAnimator
- ValueAnimator
- AnimatorSet
屬性動畫用得就比較廣泛了,屬性動畫 + 自定義View 配置 Path和貝塞爾曲線 能做出很多複雜的漂亮的效果。
(3)矢量動畫
- svg
- VectorDrawable
- AnimatedVectorDrawable
矢量動畫大家可能比較陌生,Android Studio 支持將一個Svg 文件導入生成一個path 路徑,用VectorDrawable 和AnimatedVectorDrawable 來實現矢量動畫。但是需要在Android5.0 以上。
4 . Material Design 系列
Android 5.0 開始,Google 推出了 Material Design 設計規範,Android support 包中也加入了符合Material Design 設計規範的各種控件:
1,Toolbar 的使用
2,AppbarLayout+CollapsingToolbarLayout
-
3, Behavior 相關:
(1),BottomSheetBehavior
(2), BottomSheetDialog
(3),SwipeDismissBehavior
(4), 自定義Behavior 4, TextInputLayout + TextInputEditText
5, TabLayout
6, BottomNavigationView
7 , CardView 陰影卡片
8 ,Snackbar , FloatActionButton
利用這些控件,可以做出很多符合material Design 設計規範的效果和動畫。
5 . Android 多媒體
多媒體相關也是Android 開發中比較重要並且較難的一塊了,它設計到相機、視頻、音頻相關的開發。
相機開發:
1, 使用自帶的相機APP 拍照
2,系統相冊選擇照片
3,系統相機或相冊獲取的照片裁剪
4,使用相機API 開發相機:
(1), Android 5.0 (API 21 )以下 使用Camera API
(2) , Android 5.0 以上使用 Camera2 API
5 ,自定義相冊開發
6 , 自定義裁剪界面
Android視頻開發:
(1)視頻播放
MediaPlayer
VideoView
(2)視頻編解碼
音頻開發:
AudioPlayer
音樂播放器
音視頻開發這一塊門檻較高,但是這也是比較喫香的一個領域,把這一塊喫透了,你的優勢就很大了,現在的直播這麼火,對於這一塊的需求還是比較大的。
6 . Git
Git 版本控制 也是我們常用的,熟悉各種Git 命令。對於代碼的提交、代碼拉取,歷史版本的查看等Android Studio 已經集成好了,但是還是推薦大家日常用命令行方式操作,這樣有助於我們熟悉各種Git 命令。
7. Android 權限適配
Android 6.0 以上權限適配。
8 . Gradle
- 自定義Gradle插件
- Gradle 多渠道打包
以上就是Android 相關的一些知識點。
四、學習瞭解開源庫
Github 絕對是我們程序員的寶貴財富,上面有各種各樣的開源庫,只有你想不到的,沒有你找不到的。各大公司也有各種各樣的開源的解決方案。
以下是比較流行的一些框架:
圖片加載框架:
- Universal-Imageloader
- Picasso
- Glide
- Frecssco
網絡相關框架:
- Retrofit
- Okhttp
- Volley
RxJava :
- RxJava
- RxAndroid
數據庫方面:
- GreenDao
- OrmLite
- Realm
上面都是當前流行的一些框架。尤其是RxJava , 當你看到Github 上各種各樣的 RXxxx 時,你就明白RxJava 有多火。(加個Rx感覺逼格都高了一檔)。
如果你覺得Java 基礎、Android 基礎這些東西都學得差不多了,整明白了。那麼應該學習這些框架了,我們該怎麼學習呢?不僅僅是學習怎麼使用,我們可以去學習源碼,學習他們的整個框架的設計思路、代碼規範。對於部分功能可以仿照着寫一個相同的。比如:緩存,圖片加載框架都是多級緩存的,我們可以看一下每個框架的緩存實現有何不同,各有什麼優缺點,最後仿寫一個,把它變成我們自己的。
五、學會造輪子
當我們有了一定的積累之後,試着去造輪子吧。可以是一個簡單的View、炫酷的動畫效果、一個常用的組件抽取。把這些常用的功能封裝成一個庫。當以後實現相似的功能的時候,我們就可以避免重複搬磚了。
如果條件允許,我們還可以將它開源到Github,有利於他人學習和使用,開源是一件利人利己的事。對於他人而言:可以借鑑思路、或者在項目中直接使用。對於自己而言:使用者發現bug反饋給我們,修復bug、升級版本,本生也是一個提升自己的機會。同時還能相互之間交流,吸取經驗。
如果你還沒有開始寫一個開源庫,那麼現在就嘗試着寫一個吧。
六、收集自己的工具類庫
你現在就可以看看你所做的項目,裏面是不是有一個 utils
包 ?不用看了,肯定有,裏面有你使用的各種各樣的工具類。
也許你會跟我有同樣的感覺,一些常用的操作如,讀寫文件、Bitmap轉換、日期格式化等等。當我們使用的時候,我們很難一下子就將它寫出來,我們可能會記得以前有個項目使用過,然後去翻以前的項目,有的可能去 google 下,拷貝一段代碼。
這些都是比較常用的功能,並且代碼相對固定,我們可以將我們平時使用的工具類收集到一個單獨的類庫中。然後將其分好類:
- 文件操作相關
FileUtils
- Bitmap 操作相關
BitmapUtils
- 日期格式化相關
DateUtils
上面只是舉了三個例子,所有的工具類都可以收集。
當你工作3年或者5年之後,你再來看一看這個庫,或許就會不一樣了。
七、學會思考和總結
當我們學習一個功能或者解決一個問題的時候,我們可以把整個過程梳理總結一下,如果我們學習了或者解決問題之後不做思考和總結,那麼過一段時間或許就全部忘了。好記性不如爛筆頭,梳理一下,記一個筆記或者寫一篇博文。這樣做有很多好處:
1, 有利於加深我們的記憶。
2, 脈絡梳理清楚了,有助於我們更深刻的理解。
3,就算以後忘記了,再來翻一下自己的筆記或者博客,再看一遍,就又想起來了。
4 ,還可以幫助其他人,避免遇到相同的問題。
當我們做完一個項目的時候,留給自己一些時間做一些梳理和總結吧,如果你還沒有這樣的習慣,那麼就從現在開始吧!總之,形成自己的知識體系很重要。
八、最後
本文梳理了Android 開發者進階過程學習的一些知識點和一些我個人的建議。關於Java基礎、Android 基礎、Android 進階 ,只是作了知識點梳理,沒有解答,點到爲止。要詳細學習這些知識點還需自己去看書、看博客、查資料等。當然了,本文所列出的知識點還不完全,要比較系統的學習,可以買一本書進行學習。
最後,我再重複一次,如果你想成爲一個優秀的 Android 開發人員,請集中精力,對基礎和重要的事情做深度研究。
對於很多初中級Android工程師而言,想要提升技能,往往是自己摸索成長,不成體系的學習效果低效漫長且無助。 整理的這些架構技術希望對Android開發的朋友們有所參考以及少走彎路,本文的重點是你有沒有收穫與成長,其餘的都不重要,希望讀者們能謹記這一點。
這裏,筆者分享一份從架構哲學的層面來剖析的視頻及資料分享給大家梳理了多年的架構經驗,籌備近6個月最新錄製的,相信這份視頻能給你帶來不一樣的啓發、收穫。
Android進階學習資料庫
一共十個專題,包括了Android進階所有學習資料,Android進階視頻,Flutter,java基礎,kotlin,NDK模塊,計算機網絡,數據結構與算法,微信小程序,面試題解析,framework源碼!
如果需要PDF版本可以在羣文件夾裏,自行領取!
-
或者在羣文件夾中裏,自行下載直達領取鏈接:【https://links.jianshu.com/go?to=https%3A%2F%2Fjq.qq.com%2F%3F_wv%3D1027%26k%3DBRZhpPkt】
PS:之前因爲秋招收集的二十套一二線互聯網公司Android面試真題 (含BAT、小米、華爲、美團、滴滴)和我自己整理Android複習筆記(包含Android基礎知識點、Android擴展知識點、Android源碼解析、設計模式彙總、Gradle知識點、常見算法題彙總。)
《2017-2020字節跳動Android面試歷年真題解析》
當你有了學習線路,學習哪些內容,也知道以後的路怎麼走了,理論看多了總要實踐的。
以上進階BATJ大廠學習資料可以免費分享給大家,需要完整版的朋友,【點這裏可以看到全部內容】。