2016 Android Top 10 Library

過去的 2016 年,開源社區異常活躍,很多個人與公司爭相開源自己的項目,讓人眼花繚亂,然而有些項目只是曇花一現,有些項目卻持久創造價值,為開發者提供了極大的便利,這些終究由時間來判斷。今天,我就來整理一篇,我個人認為的 2016 年對 Android 開發有巨大幫助的,甚至改變了 Android 開發方式的開源庫,但是,僅限個人認為,不具有任何權威性。

?

1. RxJava

?

地址:https://github.com/ReactiveX/RxJava

?

2016 年 Android 界最火的莫過于 RxJava 了,如果你還不知道 RxJava,你所在公司,或者你所在的項目還沒有使用 RxJava,那真的是有點 out 了,RxJava 不僅大大簡化了代碼,甚至可以說改變了我們的開發方式。

?

RxJava 是一種函數式、響應式的異步操作庫,它讓你的代碼更加簡潔,真正的讓你的代碼寫到爽!由于 RxJava 用過的都說好,基于此,GitHub 上衍生了一堆比如 RxAndroid、RxBus、RxPermission 等之類的開源庫,足以說明它的影響力。

?

關于 RxJava 的文章網上一大堆,它的使用方法與好處我就不多說了,請自行去搜索了解,總之,身為 Android 開發者,到現在你還不知道 RxJava,簡直了!

?

2. Retrofit

?

地址:https://github.com/square/retrofit

?

如果有人問我,Android 界最好用的網絡請求庫是什么?在之前可能會有人回答 android-async-http、Volley、OkHttp(準確說,OkHttp 是一個 http 請求客戶端) 之類的,但是 16 年過后,我會告訴你 Retrofit 是最好用的網絡請求庫。

?

Retrofit 完全 RESTful 風格的 api 網絡請求庫,解耦更徹底,源碼設計超多的設計模式,值得大家學習,另外擴展性非常好,支持各種配置來滿足你的需求,最最重要的是,如果你的項目使用了 RxJava,那么 Retrofit 可以完美結合,我只能說 Prefect!再次驗證了那句話:Square 出品,必屬精品!

?

3. EventBus

?

地址:https://github.com/greenrobot/EventBus

?

試想這么一個場景,在 A 頁面打開 B 頁面,然后 B 頁面打開了 C 頁面,C 頁面又打開了 D 頁面,而且還需要傳遞參數,在 D 頁面修改了一些信息,然后這些信息更新之后,A、B、C 頁面很可能都需要對應的進行數據更新,碰到這種需求該怎么處理?

?

有人說用 startActivityForResult(),你可以試下,有多么難處理,還有人想到用廣播,這個當然可以,因為廣播是全局的,主要進行注冊都可以通知到每一個頁面,但是我很不喜歡用廣播,每次用廣播都要走那一套流程,很麻煩,而且很重。

?

而如果你知道 Eventbus,那么一切都非常的簡單。

?

EventBus 是一個事件管理平臺,以事件驅動的方式來簡化事件傳遞邏輯,可以把它想象成輕量級的 BroadcastReceiver,不過,EventBus 并不是 16 年才開始進入大眾視野的,很早就開源了,只是這個庫太實用了,時至今日,它仍然很火,使用起來非常方便。

?

值得注意的是:EventBus 固然好用,但是不要過度使用,因為一旦你的代碼大量使用 EventBus,會致使代碼可讀性稍差,而且出了問題不太好定位。所以建議只在特定的場景使用,切莫貪杯!

?

4. Glide、Fresco

?

?

圖片加載可能跟網絡請求一樣,基本是所有 App 開發必備的功能,選擇一款成熟穩定的圖片加載庫重要性不言而喻,目前主流的圖片加載有 Picasso、Glide、Fresco,Glide 是 Google 員工基于 Picasso 基礎上進行開發的,所以自然各方面比 Picasso 更有優勢,而且支持 Gif,所以推薦大家優先選擇 Glide 庫,官方地址:

?

https://github.com/bumptech/glide

?

如果你的項目需要大量使用圖片,比如是類似 Instagram 一類的圖片社交 App ,那么推薦使用 Fresco。Fresco 是 Facebook 作品,關于內存的占用優化更好,但是同時包也更大,門檻也更高,初級工程師不建議使用。官方地址:

?

https://github.com/facebook/fresco

?

這兩款圖片加載庫,基本算是在 16 年使用最多,被認可最高的兩個圖片加載庫了。

?

5. LeakCanary

?

地址:https://github.com/square/leakcanary

?

開發者最關心的除了完成功能外,其次就是會不會造成內存泄露了,其實檢測內存泄露在 Java 領域有很多種方法與工具,但是針對 Android 都不夠方便,而良心公司 Square 開源了一款針對 Android 平臺的內存泄露檢測工具 LeakCanary,集成簡單,使用方便,平時測試的過程中就自動記錄了內存泄露的位置,甚至幫你定位到代碼級別,強烈推薦。

?

## 6. ButterKnife

地址:https://github.com/JakeWharton/butterknife

?

我想應該沒有人沒聽過這個庫了吧?ButterKnife 是 Android 之神 JakeWharton 的大作,已經開源了很長時間,然而在 2016 年它的使用熱度依然不減,它可以讓你避免無休止的 findViewById() 代碼,具體用法我就不多說了,使用起來比較簡單。

?

7. Realm

?

地址:https://realm.io/

?

說到 Realm 不得不提到一個 ORM 的概念。何為 ORM 呢?ORM 是 Object Relation Mapping 的縮寫,翻譯過來就是對象關系映射。這是相對于數據庫的,我們知道 Android 中使用的數據庫是 SQLite,而且 Android SDK 自帶操作數據庫的接口,而實際我們在使用的過程往往需要把查詢的數據轉換到一個 Java Object,也就是所謂的 Model,比如一般是這樣:

?

操作起來是不是很麻煩?而且可讀性超差,而有了 ORM 我們寫代碼可能會是類似這樣:

?

查詢數據是這樣:

?

?

是不是非常方便?代碼寫起來更像是面向對象,而不是一個個的裸寫 SQL 了,這就是所謂的 ORM。

?

而 Android 界的 ORM 框架有很多,比如 GreeDao、SugarORM、ActiveAndroid 等等,但是我推薦大家的 ORM 框架以上都不是,是叫做 Realm。

?

Realm 是一種面向移動端的新型輕量數據庫,而且是開源的,跟 SQLite 完全不一樣,性能上秒殺 SQLite,支持 Java、Android、iOS 各平臺,我們在實際項目中采用過,體驗下來各方面都很不錯,所以推薦大家嘗試下 Realm。

?

8. Dagger 2

?

地址:https://github.com/google/dagger

?

依賴注入的概念估計大家都聽過,不理解的不妨搜索了解下,Android 領域比較著名的依賴注入庫莫過于 Dagger 了,基于注解,使用起來異常方便。

?

Dagger 起初是 Square 開源的,后來 Google 在此技術上進行了改進與優化,去除了反射,編譯時進行依賴注入,性能上有大幅提升,取名 Dagger 2,Square 之前開源的 Dagger 已不建議使用。其實之前大家對 Dagger 的關注程度沒有那么高,一般都是屬于中、高級工程師才會關注使用,但是 16 年 Android 的架構被提上日程,各種 MVP、MVVM、Clean 架構等討論的較多,而 Dagger 作為承載這些架構重要的一環被越來越多的開發者使用,所以 16 年我們看到 Dagger 的身影越來越多,所以,Dagger 被我列為 16 年還算是比較火,比較實用的 Top 10 Android Library。

?

9. android-architecture

?

地址:https://github.com/googlesamples/android-architecture

?

上面說了,16 年 Android 架構被越來越多的開發者關注,國內外關于架構的探討比較活躍,大家熟知的 MVC、MVP、MVVM、Clean 等,就在大家爭執哪個更好,Android 開發到底該怎樣架構的時候,Google 開源了一個 Android 架構的官方指導,涉及 mvp、mvp-loaders、databinding、mvp-clean、mvp-dagger、mvp-contentproviders、mvp-rxjava 等,分別在各自指定的分支下,有非常大的參考意義,可以算是 Android 界的一大步。

?

10. awesome-android-ui

?

地址:https://github.com/wasabeef/awesome-android-ui

?

Android 開發中除了我們以上用到的各種實用庫之外,我們往往還會涉及到各種 UI 效果的實現,對于移動開發,界面開發其中是很重要的一環,而 16 年針對 Android 開發有人開源整理了這么一個庫,里面網羅了所有你見過的、沒見過的各種 UI 效果,涉及 Material、Layout、Button、List、ViewPager、Dialog、Menu、Parallax、Progress 等等,而且有相對應的截圖、gif 展示,以后應對設計師各種效果的時候有很大的參考幫助作用。

?

以上就是我總結的,我個人認為的,在 2016 年的 Android 開發中,比較實用的、對你的開發有很大幫助的一些 Android Library,除了對你們的開發效率有提升之外,還能夠了解其原理,閱讀其優秀源碼,參考其代碼設計,是絕佳的一份學習資料,希望每個人在 2017 年都能在技術上取得很大進步!

轉載于:https://www.cnblogs.com/zhang-cb/p/6297239.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371643.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371643.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

集成JavaFX和Swing

我剛剛完成了對使用Swing的應用程序組件的重寫,現在正在使用JavaFX,最后得到了與更大的swing應用程序集成的JavaFX組件。 這是一個很大的應用程序,重寫花了我一段時間,最后一切都很好,我很高興自己做到了。 您可能想在…

提示錯誤:“應為“providerInvariantName”參數的非空字符串。”

我在調試Petapoco的T4模版的時候&#xff0c;鏈接一直報如題那個錯誤。在定性問題為配置文件后找的原因如下&#xff1a; <connectionStrings><add name"這個不行" connectionString"Data Sourcexxx;Initial Catalog數據庫名;User ID帳號;Password密碼…

php oop面試題,PHP面試題 - 對面向對象的理解

具體的題目應該是&#xff1a;什么是面向對象&#xff1f;主要的特征是什么&#xff1f;當然還有很多類似的題目&#xff0c;如果你說一下你對面向對象的理解&#xff0c;或者是你對比一下面向過程等等&#xff0c;諸如此類吧&#xff1f;如果我來回答這個問題&#xff0c;我會…

NOIP2014自測(晚自習兩節+上午兩節 共5個小時)

昨天剛剛考完試然后就翹晚自習跟今天上午兩節課的語文和英語做做noip2014的題目。然后去評測了一番。首先day1day2的t1基本都是模擬&#xff0c;一看就出思路那種&#xff0c;直接ac掉。代碼如下 day1t1&#xff1a;#include<iostream>#define maxn 209using namespace s…

您在eXo平臺上的第一個Juzu Portlet

菊珠是佛教的佛珠。 一句話&#xff0c;我相信您已經學到了什么&#xff0c;印象深刻嗎&#xff1f; 好的&#xff0c;我在這里不談論佛教。 Juzu還是一個用于快速開發Portlet&#xff08;以及即將推出的獨立應用程序&#xff09;的新框架。 您可以在Juzu網站上找到所需的所有…

Spring注入方式及注解配置

一&#xff1a;基于xml的DI&#xff08;Dependency Injection&#xff09; 注入類型&#xff1a; 定義學生Student實體類和小汽車Car實體類&#xff1a;進行封裝和生成ToString(),并自定義屬性Car Student 123456789101112131415161718192021222324252627282930313233343536373…

java 切面 不執行,解決springboot的aop切面不起作用問題(失效的排查)

檢查下springboot的啟動類是否開啟掃描springbootapplicationcomponentscan(basepackages {"com.zhangpu.springboot"})另外springboot默認開啟的enableaspectjautoproxy為true如果不放心可以增加&#xff1a;enableaspectjautoproxy(proxytargetclasstrue)第二種可…

修改readonly屬性的值

一般情況下&#xff0c;readonly屬性的值是無法修改的&#xff0c;但可以通過特殊方式修改。定義一個student的類&#xff0c;其中name屬性為readonly類型的變量 interface JFStudent : NSObjectproperty(nonatomic,copy,readonly) NSString *hisName;property(nonatomic,copy)…

VisualVM:通過SSH監視遠程JVM(是否為JMX)

VisualVM是用于監視JVM&#xff08;5.0&#xff09;的有關內存使用情況&#xff0c;線程&#xff0c;GC&#xff0c;MBeans等的出色工具。讓我們看看如何通過SSH使用它來監視&#xff08;甚至使用JMX對其進行采樣&#xff0c;對帶有JMX的遠程JVM進行監視&#xff09;它。 這篇文…

h5 php js實驗總結,H5學習_番外篇_PHP數據庫操作

1. 文件操作1.1 打開關閉文件fopen()resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )?fopen()函數將resource綁定到一個流或句柄。綁定之后&#xff0c;腳本就可以通過句柄與此資源交互;例1:以只讀方式打開一個位于本地服務…

ReactNative開發環境

此內容根據徐贏老師的文檔整理后寫處 原版地址&#xff1a;https://tuomaxu.gitbooks.io/reactnative/content/ ReactNative是跨平開發的解決方案&#xff0c;在開發平臺的選擇上&#xff0c;mac平臺和win平臺都可以。 所需要工具如下&#xff1a; 1&#xff0c;Nodejs環境 2&a…

Python自動化開發 - 字符串, 列表, 元組, 字典和和文件操作

一、字符串特性&#xff1a;字符串本身不可修改&#xff0c;除非字符串變量重新賦值。Python3中所有字符串都是Unicode字符串&#xff0c;支持中文。 >>> name "Jonathan" >>> name "Jonathan" "Ni" >>>print(na…

shiro java配置,InI 配置 - 跟我學 Apache Shiro_教程_Java開發社區

INI 配置之前章節我們已經接觸過一些 INI 配置規則了&#xff0c;如果大家使用過如 Spring 之類的 IoC/DI 容器的話&#xff0c;Shiro 提供的 INI 配置也是非常類似的&#xff0c;即可以理解為是一個 IoC/DI 容器&#xff0c;但是區別在于它從一個根對象 securityManager 開始。…

在Spring容器外部連接對象依賴項

有幾種有趣的方法可以設置在Spring容器外部實例化的對象的屬性和依賴關系。 用例首先&#xff0c;為什么我們需要在Spring容器之外進行依賴注入–我知道三個用例&#xff0c;其中我實例化了Spring容器之外的對象并需要注入依賴。 首先考慮使用Spring TaskExecutor執行一系列任…

前端學習路線匯總

https://123.w3cschool.cn/plk2fihttps://www.w3cschool.cn/nodejs/nodejs-global-object.htmlnode.js轉載于:https://www.cnblogs.com/sxz2008/p/7238773.html

MediaInfo源代碼分析 1:整體結構

博客地址&#xff1a;http://blog.csdn.net/leixiaohua1020/article/details/12016231 MediaInfo源代碼分析系列文章列表&#xff1a; MediaInfo源代碼分析 1&#xff1a;整體結構MediaInfo源代碼分析 2&#xff1a;API函數MediaInfo源代碼分析 3&#xff1a;Open()函數MediaI…

測試RESTful服務的客戶端

開發使用RESTful Web API的應用程序可能意味著開發服務器和客戶端。 為服務器端編寫集成測試可以像使用Arquillian來啟動服務器一樣容易&#xff0c;并且可以通過REST確保測試服務是否按預期工作。 問題是如何測試客戶端。 在本文中&#xff0c;我們將了解如何使用模擬來測試客…

linux mysql誤刪,linux下MySQL安裝與刪除?(Ubuntu)

1、MySQL安裝A)MySQL安裝&#xff1a; sudo apt-get install mysql-server mysql-clientB)啟動/停止MySQL服務&#xff1a;MySQL 在安裝以后&#xff0c;MySQL 就已經啟動&#xff1b;如果需要手動啟動或停止則如下操作&#xff1a;手動啟動服務&#xff1a; sudo start mysql手…

對多態的理解例子

public class A {public String show(D obj) {return ("A and D");}public String show(A obj) {return ("A and A");} }class B extends A{public String show(B obj){ //重載return ("B and B");}public String show(A obj){ //重寫show(A obj…

【Java每日一題】20170120

20170119問題解析請點擊今日問題下方的“【Java每日一題】20170120”查看&#xff08;問題解析在公眾號首發&#xff0c;公眾號ID&#xff1a;weknow619&#xff09; package Jan2017; import java.util.Arrays; import java.util.List; public class Ques0120 { publ…