Android 開發者該如何進階?

常常在簡書和微信上收到一些同窗的私信,說本身立刻畢業或者已經畢業一年,從事Android開發相關的工做,如今不知道要學習什麼東西了。或者說本身也在摸索着學習,可是不知道學習的路線對不對,感受很迷茫,想讓我給一些建議。css

其實大多數的開發者都有過相似的經歷(我也有過),當本身項目完成、處於維護階段的時候,工做不忙,想本身學習,可是又不知道學什麼?從何學起?東一榔頭西一棒子,最終收穫甚少。而後開始自我懷疑,厭倦學習,今後墮落。java

那麼,做爲Android 開發者,該怎樣規劃本身的學習路線,而後一步一個腳印的向中高級進階呢?本篇文章根據本身的一些看法梳理一下。c++

1、Java基礎

首先,Java做爲Android開發的第一語言(Kotlin普及還須要時間),要想在Android開發中遊刃有餘,就得先打牢Java基礎,Java 基礎有哪些呢?除了一些基本的語法以外,總結了以下一些基礎:程序員

1 . 面向對象的三大特性:
Java 做爲面向對象編程語言,你得知道OOP的的三大特性
封裝繼承多態面試

2 . 程序設計的6大原則:算法

  • 單一職責原則數據庫

  • 里氏替換原則編程

  • 依賴倒置原則設計模式

  • 接口隔離原則緩存

  • 迪米特法則

  • 開閉原則

瞭解這6大設計原則是很是有必要的,它能指導你的程序整個結構的設計和規範。要想提升你的代碼質量,請熟記這幾個原則。在咱們設計類、方法、接口的時候,請遵循這些原則。

3 . 設計模式

  • 單例模式 :double check 雙重加鎖方式、靜態內部類方式、枚舉方式。

  • 構造器模式

  • 模板方法模式

  • 裝飾器模式

  • 觀察者模式

  • 責任鏈模式

  • 策略模式

23種設計模式就不一一列舉了,無論你是工做了5年仍是工做了1年,學習一下設計模式吧,這有助於打開你的編程思惟。

4 . Java 字符串相關
Java 字符串相關的三個類:StringStringBuilderStringBuffer ,你知道他們的區別嗎?這也是面試中比較常問的,若是你還不知道?那就去查查資料吧。

5 . Java 線程池
線程池方面,JDK 爲咱們內置了幾種線程池:

  • newFixedThreadPool:newFixedThreadPool,建立固定大小的線程池,poolCoreSize和maxPoolSize 相等,到達coreSize,則將新的任務放到緩存隊列,有線程執行完畢,直接去取。

  • newSingleThreadExecutor:newSingleThreadExecutor,建立一個單線程的線程池,核心池的大小和最大池大小都爲1.

  • newCacheThreadPool:newCacheThreadPool,無大小限制的線程池,提交一個任務就建立一個線程執行。

若是默認的幾種線程池還不能知足你的需求,那就試一試自定義線程池吧!自定義線程池繼承ThreadPoolExecutor

6 . Java 集合
集合是Java中用得最多的了吧,你也面試的必問題之一,對於Java集合,你的腦殼裏要熟記它的整個框架圖:

Collection
 (1) List:

  • LinkedList

  • ArrayList

  • Vector

(2) Set

  • HashSet

  • TreeSet

Map:

  • HashMap

  • TreeMap

  • HashTable

咱們須要知道每一個容器的特性,以及它們的擴容方式(這個很重要)。根據咱們的數據大小、特定場景、業務邏輯來選擇合適的容器。

7 . Java 內存模型

Java 內存模型這一塊很是重要,由於它涉及到咱們程序的性能,咱們須要知道,內存是如何分配的,成員變量、靜態變量、局部變量、對象等各自分配到哪個區:

  • 棧內存

  • 堆內存

垃圾回收機制:

涉及到內存,咱們就須要知道java的垃圾回收機制,雖然Java 不像c++同樣須要咱們本身分配內存、釋放內存。可是咱們仍是須要知道它的回收機制,分代回收:

  • 年輕代:1 Eden 區 和2個Survivor 區

  • 年老代

  • 永久代

分代回收分爲了三個代,每一個代的垃圾回收時機和頻率是不同的,所以才用的回收算法也不同。

總的來講:年輕代的回收頻率很高,對象的生命週期比較短暫,當通過必定次數的回收週期以後,年輕代的對象還存活的話,就會被移動到年老代,年老代的回收比較耗時,回收頻率較低,回收成本較大。

Java 基礎總結:關於Java基礎暫時就總結了這些,這些都是Android 開發中比較經常使用或者經常須要關心的一些東西。若是你想比較系統的學習Java基礎相關的東西,推薦你去看一下經典書籍《Thinking in Java》。

2、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, bindService

    2種啓動方式 所走的生命週期方法是不同的

  • Service vs IntentService:
    Service 和IntentService 個自用於不一樣的場景,想知道他們各自的使用場景和區別嗎?查資料去吧!

BroadcastReceiver:

廣播相關的知識點:廣播有兩種註冊方式,Manifest 清單文件中註冊和 代碼中動態註冊,代碼中註冊的廣播通常爲局部廣播,最好 registerunRegister 成對出現,別忘了反註冊。

全局廣播能夠跨應用訪問,存在安全隱患而且效率不高,所以出現了更安全、更高效的替代者: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

全部複雜的界面都由這些簡單的基礎控件組成,所以,你須要好好了解一下他們的各類屬性。

3、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 設計規範的效果和動畫。

更多關於Material Design 的用法,請看個人系列博客
:http://www.jianshu.com/u/35167a70aa39

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 相關的一些知識點。

4、學習瞭解開源庫

Github 絕對是咱們程序員的寶貴財富,上面有各類各樣的開源庫,只有你想不到的,沒有你找不到的。各大公司也有各類各樣的開源的解決方案。

如下是比較流行的一些框架:

圖片加載框架:

  • Universal-Imageloader

  • Picasso

  • Glide

  • Frecssco

網絡相關框架:

  • Retrofit

  • Okhttp

  • Volley

RxJava :

  • RxJava

  • RxAndroid

數據庫方面:

  • GreenDao

  • OrmLite

  • Realm

上面都是當前流行的一些框架。尤爲是RxJava , 當你看到Github 上各類各樣的 RXxxx 時,你就明白RxJava 有多火。(加個Rx感受逼格都高了一檔)。

若是你以爲Java 基礎、Android 基礎這些東西都學得差很少了,整明白了。那麼應該學習這些框架了,咱們該怎麼學習呢?不只僅是學習怎麼使用,咱們能夠去學習源碼,學習他們的整個框架的設計思路、代碼規範。對於部分功能能夠仿照着寫一個相同的。好比:緩存,圖片加載框架都是多級緩存的,咱們能夠看一下每一個框架的緩存實現有何不一樣,各有什麼優缺點,最後仿寫一個,把它變成咱們本身的。

5、學會造輪子

當咱們有了必定的積累以後,試着去造輪子吧。能夠是一個簡單的View、炫酷的動畫效果、一個經常使用的組件抽取。把這些經常使用的功能封裝成一個庫。當之後實現類似的功能的時候,咱們就能夠避免重複搬磚了。

若是條件容許,咱們還能夠將它開源到Github,有利於他人學習和使用,開源是一件利人利己的事。對於他人而言:能夠借鑑思路、或者在項目中直接使用。對於本身而言:使用者發現bug反饋給咱們,修復bug、升級版本,本生也是一個提高本身的機會。同時還能相互之間交流,吸收經驗。

若是你尚未開始寫一個開源庫,那麼如今就嘗試着寫一個吧。

6、收集本身的工具類庫

你如今就能夠看看你所作的項目,裏面是否是有一個 utils 包 ?不用看了,確定有,裏面有你使用的各類各樣的工具類。

也許你會跟我有一樣的感受,一些經常使用的操做如,讀寫文件、Bitmap轉換、日期格式化等等。當咱們使用的時候,咱們很難一會兒就將它寫出來,咱們可能會記得之前有個項目使用過,而後去翻之前的項目,有的可能去 google 下,拷貝一段代碼。

這些都是比較經常使用的功能,而且代碼相對固定,咱們能夠將咱們平時使用的工具類收集到一個單獨的類庫中。而後將其分好類:

  • 文件操做相關 FileUtils

  • Bitmap 操做相關 BitmapUtils

  • 日期格式化相關 DateUtils

上面只是舉了三個例子,全部的工具類均可以收集。

當你工做3年或者5年以後,你再來看一看這個庫,或許就會不同了。

7、學會思考和總結

當咱們學習一個功能或者解決一個問題的時候,咱們能夠把整個過程梳理總結一下,若是咱們學習了或者解決問題以後不作思考和總結,那麼過一段時間或許就所有忘了。好記性不如爛筆頭,梳理一下,記一個筆記或者寫一篇博文。這樣作有不少好處:

1, 有利於加深咱們的記憶。

2, 脈絡梳理清楚了,有助於咱們更深入的理解。

3,就算之後忘記了,再來翻一下本身的筆記或者博客,再看一遍,就又想起來了。

4 ,還能夠幫助其餘人,避免遇到相同的問題。

當咱們作完一個項目的時候,留給本身一些時間作一些梳理和總結吧,若是你尚未這樣的習慣,那麼就從如今開始吧!總之,造成本身的知識體系很重要。

8、最後

本文梳理了Android 開發者進階過程學習的一些知識點和一些我我的的建議。關於Java基礎、Android 基礎、Android 進階 ,只是做了知識點梳理,沒有解答,點到爲止。要詳細學習這些知識點還需本身去看書、看博客、查資料等。固然了,本文所列出的知識點還不徹底,要比較系統的學習,能夠買一本書進行學習。

歡迎你們加入Android技術開發交流羣:653583088 本羣提供免費的學習指導以及免費的解答不懂得問題均可以在本羣提出來 以後還會有職業生涯規劃以及面試指導進羣修改羣備註:開發年限-地區-經驗方便解答問題

相關文章
相關標籤/搜索