在 2016 年學 Android 是一種什麼樣的體驗?

在 2016 年學 Android 是一種什麼樣的體驗?

@author ASCE1885的 Github 簡書 微博 CSDN 知乎
本文因爲潛在的商業目的,不開放全文轉載許可,謝謝!html

white_beard.png-475.8kB

廣而告之時間:個人新書《Android 高級進階》(https://item.jd.com/108219759...在京東開始預售了,歡迎訂購!前端

圖片描述

轉眼間 2016 年的電量已不足 20%,不由感慨 How Time Flies!不知不覺 Android 移動開發已經走過了八年的光陰,在這八年的時間中,Android 開發從最初的簡單調用系統 API,到各種框架的不斷涌現,再到現在的成熟階段,那麼做爲一個想在 2016 年開始學習 Android 或者從新開始學習 Android 的開發者來講,你將看到一幅什麼樣的光景呢?android

首先你會發現最新的 Android 系統版本已是 7.0,做爲大版本確定存在不少變化和改進,開發者須要持續跟進這些變化,例如 Android 7.0 刪除了三個隱式廣播,優化內存使用和優化電量消耗。再往前一個版本,Android 6.0 從新設計了權限系統,一系列的權限再也不簡單的在 AndroidManifest.xml 文件中聲明就可使用,而是要動態申請。再往前一個版本,Android 5.0 引入了 Material Design,今後 Android 有了本身特有的設計語言和規範。git

image_1avj9nk461qdajmb17c315fm9bm29.png-172.7kB

從集成開發環境和構建工具上面看,一兩年前還在苟延殘喘的 eclipse+ant 基本絕跡了,取而代之的是流行的 Android Studio +Gradle,截至本文發稿前,Android Studio 剛剛發佈了 2.2.2 版本,對應的 Gradle 版本爲 2.14.1 版本。談到 Android 的構建,除了 Gradle,你也能夠嘗試 Facebook 的 Buck,雖然它的配置侵入性很強,但構建速度是比 Gradle 快不少的,固然,若是使用最新的 Android Studio+Gradle,咱們能夠開啓 Instant Run 模式,從而達到快速的從新構建。github

image_1avj8ih4oe1m1rjgqg41pqg19vn1f.png-184.5kB

著名的 Support Library 已經更新到 25.0.0,其中 support-v4 庫從 24.2.0 版本開始就拆分紅 5 個子庫,開發者能夠更靈活的引用它。數據庫

image_1avj91p8i19betnn1ld42t01uc61s.png-88kB

什麼?你還在使用 ListView,GridView?是時候使用 RecyclerView 進行替換了,同時別忘了使用 Support Library 24.2.0 開始引入的 DiffUtil 來高效更新 RecyclerView。編程

從搭建應用的UI架構開始,咱們再也不考慮 MVC 模式,取而代之以 MVP 或者 MVVM 模式,Android 官方雖然對於 MVP 模式沒有統一的標準,但仍是提供了一系列使用例子 供開發者做爲實現參考。設計模式

image_1avj8ceqa6uc1ffr14fc1dgp10qg12.png-83.5kB

至於 MVVM 模式,Android 官方提供了一個名爲 DataBinding 函數庫做爲標準實現,相信後面會愈來愈多開發者在項目中引入。緩存

若是你已經厭倦了使用 Java 來編寫 Android 應用,沒有關係,你能夠嘗試下 Kotlin,它能夠比做 Android 世界的 Swift,目前已經發布了 1.0.4 版本,支持多種現代的編程特性,例如函數式編程。同時 100% 支持和 Java 的混合編程,具備 Java 編程基礎的開發者很容易上手。微信

image_1avjccovrbrspjak8a1ajpr299.png-250kB

若是你也不喜歡 Kotlin,但熟悉 Javascript 語言,那麼推薦你試用下今年很是火爆的 React Native,它不只可使用 Javascript 語言編寫 Android 應用,並且能夠編寫 iOS 應用,並且代碼複用高達 80% 左右,同時,新功能的上線再也不須要往應用市場提交新的 APK 包,而是支持在線熱更新。固然,React Native 寫出來的界面是 Native 的體驗,不是 H5 的體驗。

image_1avjddbak1obhc9nrd76tq1p0mm.png-46.2kB

提起 React Native,咱們不得不提到它的競爭者 Weex,Weex 的基本原理和 React Native 一致,也是使用 Javascript 語言編寫 Android 和 iOS 應用,不一樣的是,React Native 是基於 React 框架,Weex 是基於 Vue 框架。固然,目前看來,React Native 的勢頭是蓋過 Weex 的。

image_1avji66pflkivkj1sr8rvg1v0m9.png-258.8kB

前面咱們提到過 Kotlin 支持函數式編程,個人意思固然不是說使用 Java 語言就不能支持函數式的開發,可是就目前 Android 支持的 Java 版本,要支持函數式編程咱們須要引入一個知名的函數庫 RxJava,這是一個函數響應式編程框架,採用觀察者設計模式,最直觀的,它能讓你的代碼避免回調地獄的出現,使得代碼數據流向很是清晰,在 Android 中使用 RxJava,還須要引入 RxAndroid 做爲橋接,固然,還存在 RxBus,RxBinding 等等擴展函數庫。

提及這兩年 Android 開發的變化,你會發現熱修復框架的如春筍般涌現,你以前可能知道 Dexposed,AndFix,Nuwa 等,但最近幾個月出現的新美大 Robust,微信的 Tinker,手機 QQ 的 QFix 等方案你是否瞭解和對比過?

咱們知道熱修復是用來在線修復嚴重性的 bug,那麼 Android Native 代碼如何實現功能模塊的在線更新呢?這就須要涉及插件化框架的概念了。Android 平臺的插件化框架也是存在多種方案,各有優劣。常見的攜程的 DynamicAPK,360 的 DroidPlugin,iReader 的 ZeusPlugin 以及 Small 等。另外,插件化也是解決 64K 問題的一大利器。

另一個和熱修復容易混淆的概念是應用的增量更新,增量更新的意思是應用在自動更新時下載的 APK 不是全量的,而是一個差分包,下載完成合並後再進行安裝,能夠看到,熱修復和增量更新最大的區別是應用更新後是否須要從新安裝。

上面說到的熱修復,插件化更新,增量更新,都依賴於應用啓動後去服務端下載對應的更新包,那麼若是應用啓動時去讀取本地緩存或者數據庫等數據,因爲文件損壞或者數據格式不正確,可能會致使應用啓動必然閃退,所以,咱們還須要引入啓動保護機制來清除緩存數據從而保證應用能夠正常啓動。

對了,應用底層基礎函數庫也發生了很大變化,網絡通訊庫 android-async-http 已再也不是流行,OkHttp+Retrofit 是主流的選擇,圖片加載和緩存框架 Android-Universal-Image-Loader 也已經落伍了,Glide,Fresco 等是更優的選擇。其餘流行的底層函數庫還有依賴注入框架 Dagger2,事件總線框架 EventBus,數據庫 ORM 框架 greenDAO,就連日誌記錄函數庫也涌現了很多,其中以 Timber,Hugo,logger 最有表明性。

2017 年還將會有哪些新技術或者新的變化出現呢?讓咱們拭目以待吧!

歡迎關注個人微信公衆號 ASCE1885,專一與原創或者分享 Android,iOS,ReactNative,Web 前端移動開發領域高質量文章,主要包括業界最新動態,前沿技術趨勢,開源函數庫與工具等。

相關文章
相關標籤/搜索