過去的 2016 年,開源社區異常活躍,不少我的與公司爭相開源本身的項目,讓人眼花繚亂,然而有些項目只是曇花一現,有些項目卻持久創造價值,爲開發者提供了極大的便利,這些終究由時間來判斷。今天,我就來整理一篇,我我的認爲的 2016 年對 Android 開發有巨大幫助的,甚至改變了 Android 開發方式的開源庫,可是,僅限我的認爲,不具備任何權威性。java
地址:github.com/ReactiveX/R…android
2016 年 Android 界最火的莫過於 RxJava 了,若是你還不知道 RxJava,你所在公司,或者你所在的項目尚未使用 RxJava,那真的是有點 out 了,RxJava 不只大大簡化了代碼,甚至能夠說改變了咱們的開發方式。git
RxJava 是一種函數式、響應式的異步操做庫,它讓你的代碼更加簡潔,真正的讓你的代碼寫到爽!因爲 RxJava 用過的都說好,基於此,GitHub 上衍生了一堆好比 RxAndroid、RxBus、RxPermission 等之類的開源庫,足以說明它的影響力。github
關於 RxJava 的文章網上一大堆,它的使用方法與好處我就很少說了,請自行去搜索瞭解,總之,身爲 Android 開發者,到如今你還不知道 RxJava,簡直了!數據庫
地址:github.com/square/retr…設計模式
若是有人問我,Android 界最好用的網絡請求庫是什麼?在以前可能會有人回答 android-async-http、Volley、OkHttp(準確說,OkHttp 是一個 http 請求客戶端) 之類的,可是 16 年事後,我會告訴你 Retrofit 是最好用的網絡請求庫。api
Retrofit 徹底 RESTful 風格的 api 網絡請求庫,解耦更完全,源碼設計超多的設計模式,值得你們學習,另外擴展性很是好,支持各類配置來知足你的需求,最最重要的是,若是你的項目使用了 RxJava,那麼 Retrofit 能夠完美結合,我只能說 Prefect!再次驗證了那句話:Square 出品,必屬精品!ruby
試想這麼一個場景,在 A 頁面打開 B 頁面,而後 B 頁面打開了 C 頁面,C 頁面又打開了 D 頁面,並且還須要傳遞參數,在 D 頁面修改了一些信息,而後這些信息更新以後,A、B、C 頁面極可能都須要對應的進行數據更新,碰到這種需求該怎麼處理?網絡
有人說用 startActivityForResult(),你能夠試下,有多麼難處理,還有人想到用廣播,這個固然能夠,由於廣播是全局的,主要進行註冊均可以通知到每個頁面,可是我很不喜歡用廣播,每次用廣播都要走那一套流程,很麻煩,並且很重。
而若是你知道 Eventbus,那麼一切都很是的簡單。
EventBus 是一個事件管理平臺,以事件驅動的方式來簡化事件傳遞邏輯,能夠把它想象成輕量級的 BroadcastReceiver,不過,EventBus 並非 16 年纔開始進入大衆視野的,很早就開源了,只是這個庫太實用了,時至今日,它仍然很火,使用起來很是方便。
值得注意的是:EventBus 當然好用,可是不要過分使用,由於一旦你的代碼大量使用 EventBus,會導致代碼可讀性稍差,並且出了問題不太好定位。因此建議只在特定的場景使用,切莫貪杯!
圖片加載可能跟網絡請求同樣,基本是全部 App 開發必備的功能,選擇一款成熟穩定的圖片加載庫重要性不言而喻,目前主流的圖片加載有 Picasso、Glide、Fresco,Glide 是 Google 員工基於 Picasso 基礎上進行開發的,因此天然各方面比 Picasso 更有優點,並且支持 Gif,因此推薦你們優先選擇 Glide 庫,官方地址:
若是你的項目須要大量使用圖片,好比是相似 Instagram 一類的圖片社交 App ,那麼推薦使用 Fresco。Fresco 是 Facebook 做品,關於內存的佔用優化更好,可是同時包也更大,門檻也更高,初級工程師不建議使用。官方地址:
這兩款圖片加載庫,基本算是在 16 年使用最多,被承認最高的兩個圖片加載庫了。
開發者最關心的除了完成功能外,其次就是會不會形成內存泄露了,其實檢測內存泄露在 Java 領域有不少種方法與工具,可是針對 Android 都不夠方便,而良心公司 Square 開源了一款針對 Android 平臺的內存泄露檢測工具 LeakCanary,集成簡單,使用方便,平時測試的過程當中就自動記錄了內存泄露的位置,甚至幫你定位到代碼級別,強烈推薦。
我想應該沒有人沒聽過這個庫了吧?ButterKnife 是 Android 之神 JakeWharton 的大做,已經開源了很長時間,然而在 2016 年它的使用熱度依然不減,它可讓你避免無休止的 findViewById() 代碼,具體用法我就很少說了,使用起來比較簡單。
地址:realm.io/
說到 Realm 不得不提到一個 ORM 的概念。何爲 ORM 呢?ORM 是 Object Relation Mapping 的縮寫,翻譯過來就是對象關係映射。這是相對於數據庫的,咱們知道 Android 中使用的數據庫是 SQLite,並且 Android SDK 自帶操做數據庫的接口,而實際咱們在使用的過程每每須要把查詢的數據轉換到一個 Java Object,也就是所謂的 Model,好比通常是這樣:
public User selectWithId(int id) {
User user = null;
Cursor cursor = db.rawQuery("select * from users where id = ?", new String[]{id});
if (cursor != null && cursor.moveToFirst()) {
int age = cursor.getInt(cursor.getColumnIndex("age"));
String userName = cursor.getString(cursor.getColumnIndex("user_name"));
...
user = new User(age, userName, ...);
cursor.close();
}
return user;
}複製代碼
操做起來是否是很麻煩?並且可讀性超差,而有了 ORM 咱們寫代碼可能會是相似這樣:
查詢數據是這樣:
public User getUserById(int id) {
return RealmResults<User> pups = realm.where(User.class)
.lessThan("id", 2)
.findAll();
}複製代碼
是否是很是方便?代碼寫起來更像是面向對象,而不是一個個的裸寫 SQL 了,這就是所謂的 ORM。
而 Android 界的 ORM 框架有不少,好比 GreenDao、SugarORM、ActiveAndroid 等等,可是我推薦你們的 ORM 框架以上都不是,是叫作 Realm。
Realm 是一種面向移動端的新型輕量數據庫,並且是開源的,跟 SQLite 徹底不同,性能上秒殺 SQLite,支持 Java、Android、iOS 各平臺,咱們在實際項目中採用過,體驗下來各方面都很不錯,因此推薦你們嘗試下 Realm。
依賴注入的概念估計你們都聽過,不理解的不妨搜索瞭解下,Android 領域比較著名的依賴注入庫莫過於 Dagger 了,基於註解,使用起來異常方便。
Dagger 起初是 Square 開源的,後來 Google 在此技術上進行了改進與優化,去除了反射,編譯時進行依賴注入,性能上有大幅提高,取名 Dagger 2,Square 以前開源的 Dagger 已不建議使用。其實以前你們對 Dagger 的關注程度沒有那麼高,通常都是屬於中、高級工程師纔會關注使用,可是 16 年 Android 的架構被提上日程,各類 MVP、MVVM、Clean 架構等討論的較多,而 Dagger 做爲承載這些架構重要的一環被愈來愈多的開發者使用,因此 16 年咱們看到 Dagger 的身影愈來愈多,因此,Dagger 被我列爲 16 年還算是比較火,比較實用的 Top 10 Android Library。
上面說了,16 年 Android 架構被愈來愈多的開發者關注,國內外關於架構的探討比較活躍,你們熟知的 MVC、MVP、MVVM、Clean 等,就在你們爭執哪一個更好,Android 開發到底該怎樣架構的時候,Google 開源了一個 Android 架構的官方指導,涉及 mvp、mvp-loaders、databinding、mvp-clean、mvp-dagger、mvp-contentproviders、mvp-rxjava 等,分別在各自指定的分支下,有很是大的參考意義,能夠算是 Android 界的一大步。
Android 開發中除了咱們以上用到的各類實用庫以外,咱們每每還會涉及到各類 UI 效果的實現,對於移動開發,界面開發其中是很重要的一環,而 16 年針對 Android 開發有人開源整理了這麼一個庫,裏面網羅了全部你見過的、沒見過的各類 UI 效果,涉及 Material、Layout、Button、List、ViewPager、Dialog、Menu、Parallax、Progress 等等,並且有相對應的截圖、gif 展現,之後應對設計師各類效果的時候有很大的參考幫助做用。
以上就是我總結的,我我的認爲的,在 2016 年的 Android 開發中,比較實用的、對你的開發有很大幫助的一些 Android Library,除了對大家的開發效率有提高以外,還可以瞭解其原理,閱讀其優秀源碼,參考其代碼設計,是絕佳的一份學習資料,但願每一個人在 2017 年都能在技術上取得很大進步!
本文原創發佈於微信公衆號 AndroidDeveloper,id: googdev,不止技術分享,還有更多扯淡,關注請慎重!