Android 通用流行框架梳理(轉)

1. 緩存

DiskLruCacheJava實現基于LRU的磁盤緩存,

防止多圖OOM的時候用得上。

2.圖片加載

Android Universal Image Loader一個強大的加載,緩存,展示圖片的庫

Picasso一個強大的圖片下載與緩存的庫

Fresco一個用于管理圖像和他們使用的內存的庫

Glide一個圖片加載和緩存的庫

3. 圖片處理

Picasso-transformations一個為Picasso提供多種圖片變換的庫

Glide-transformations一個為Glide提供多種圖片變換的庫

Android-gpuimage基于OpenGL的Android過濾器

4. 網絡請求

Android Async HTTPAndroid異步HTTP庫

AndroidAsync異步Socket,HTTP(客戶端+服務器),WebSocket,和socket.io庫。基于NIO而不是線程。

OkHttp一個Http與Http/2的客戶端,比其他的強大,使用方式也稍顯復雜

Retrofit類型安全的Http客戶端

VolleyGoogle推出的Android異步網絡請求框架和圖片加載框架。2013年Google I/O大會上推出了一個新的網絡通信框架——Volley。Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優點集于了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網絡上的圖片。除了簡單易用之外,Volley在性能方面也進行了大幅度的調整,它的設計目標就是非常適合去進行數據量不大,但通信頻繁的網絡操作,而對于大數據量的網絡操作,比如說下載文件等,Volley的表現就會非常糟糕。

5. 網絡解析

Gson一個Java序列化/反序列化庫,可以將JSON和java對象互相轉換。相對于較為傳統的Json解析來說,google共享的開源Gson在解析速度和所使用的內存在有著明顯的優勢,雖然說阿里巴巴也提供了fastgson包,但是它跟Gson的處理速度大同小異,只是底層實現的原理不同。核心函數是:

[java]view plaincopy

publicstaticString?createJsonString(Object?value)

{

Gson?gson?=newGson();

String?str?=?gson.toJson(value);

returnstr;

}

JacksonJackson可以輕松地將Java對象轉換成json對象和xml文檔,同樣也可以將json、xml轉換成Java對象。

Stream API方式是開銷最低、效率最高,但編寫代碼復雜度也最高,在生成Json時,需要逐步編寫符號和字段拼接json,在解析Json時,需要根據token指向也查找json值,生成和解析json都不是很方便,代碼可讀性也很低。

Databinding處理Json是最常用的json處理方式,生成json時,創建相關的java對象,并根據json內容結構把java對象組裝起來,最后調用writeValue方法即可生成json,

解析時,就更簡單了,直接把json映射到相關的java對象,然后就可以遍歷java對象來獲取值了。

FastjsonJava上一個快速的JSON解析器/生成器。阿里巴巴FastJson是一個Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特征:

速度最快,測試表明,fastjson具有極快的性能,超越任其他的Java Json parser。包括自稱最快的JackJson;

功能強大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;無依賴,能夠直接運行在Java SE 5.0以上版本;支持Android;開源 (Apache 2.0)

[java]view plaincopy

t?=?JSON.parseObject(jsonString,?cls);

list?=?JSON.parseArray(jsonString,?cls);

HtmlPaser一種用來解析單個獨立html或嵌套html的方式。對于樹型結構進行遍歷的函數,這些函數最容易理解:

NodegetParent():取得父節點

NodeListgetChildren():取得子節點的列表

NodegetFirstChild():取得第一個子節點

NodegetLastChild():取得最后一個子節點

NodegetPreviousSibling():取得前一個兄弟(不好意思,英文是兄弟姐妹,直譯太麻煩而且不符合習慣,對不起女同胞了)

NodegetNextSibling():取得下一個兄弟節點

取得Node內容的函數:

StringgetText():取得文本

StringtoPlainTextString():取得純文本信息。

StringtoHtml():取得HTML信息(原始HTML)

StringtoHtml(boolean verbatim):取得HTML信息(原始HTML)

StringtoString():取得字符串信息(原始HTML)

PagegetPage():取得這個Node對應的Page對象

intgetStartPosition():取得這個Node在HTML頁面中的起始位置

intgetEndPosition():取得這個Node在HTML頁面中的結束位置

用于Filter過濾的函數:

voidcollectInto(NodeList list, NodeFilter filter):基于filter的條件對于這個節點進行過濾,符合條件的節點放到list中。

用于Visitor遍歷的函數:

voidaccept(NodeVisitor visitor):對這個Node應用visitor

Jsoup一個以最好的DOM,CSS和jQuery解析html的庫。通過class="article_item"獲取到所有的元素,也就是Element,然后遍歷所有的元素,把每個元素我們需要的值取出來。我們可以定義一個實體類,

6. 數據庫

對象-關系映射(OBJECT/RELATION MAPPING,簡稱ORM),是隨著面向對象的軟件開發方法發展而產生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系數據庫是企業級應用環境中永久存放數據的主流數據存儲系統。對象和關系數據是業務實體的兩種表現形式,業務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在數據庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)系統一般以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。

OrmLiteJDBC和Android的輕量級ORM (對象關系映射)java包。提高我們的開發效率

Sugar用超級簡單的方法處理Android數據庫。SugarORM 是 Android 平臺專用ORM,感覺還是這個好用

一個簡單,簡潔,干凈的一體化進程以最小的配置。

通過反射自動命名表和列。

支持不同模式版本之間遷移。

GreenDAO一種輕快地將對象映射到SQLite數據庫的ORM解決方案。當性能很重要時(數據訪問頻繁),GreenDao是一個很快的解決方案,它能夠支持數千條記錄的CRUD每秒,和OrmLite相比,GreenDAO要快幾乎4.5倍。感覺平時沒必要。

ActiveAndroid以活動記錄方式為Android SQLite提供持久化

SQLBriteSQLiteOpenHelper 和ContentResolver的輕量級包裝。感覺不太好用。

Realm移動數據庫:一個SQLite和ORM的替換品。安卓開發的最新趨勢,支持JSON,流式api,數據變更通知,以及加密支持,這些都為安卓開發者帶來了方便。

7. 依賴注入

ButterKnife將Android視圖和回調方法綁定到字段和方法上。也就是 findViewById(),一直以來的做法都是一個個定義,然后在 setContentView() 或 inflate() 之后一一來findViewById()進行實例化,而使用 ButterKnife,你只需要在代碼中 使用注解方式進行對象申明,然后在 setContentView() 或 inflate() 之后調用一句話,那么申明的所有對象自動創建出來。OnClickListener監聽什么的。

Dagger2一個Android和java快速依賴注射器。目前Dagger 2 確實是最容易使用和調試,同時還具有最佳性能的框架了。不太明白。

AndroidAnotations快速安卓開發。易于維護。使代碼更加精簡,使項目更加容易維護

RoboGuiceAndroid平臺的Google Guice。Dependency Injection( 依賴注入)可以很好的幫助我們分離模塊,降低耦合、提高可測試性。(PS:Roboguice 只是一個工具,依賴注入更多的是一種思想)

8. 圖表

WilliamChart創建圖表的Android庫。WilliamChart是基于Views的Android圖表類庫,幫助開發者在Android應用中實現折線圖、柱狀圖和堆疊柱狀圖。數值發生變化時圖表也會以動畫的效果發生變化。

HelloCharts兼容到API8的Android圖表庫

MPAndroidChart一個強大的Android圖表視圖/圖形庫。一個可以拖動縮放的圖表庫,包含曲線圖、直方圖、餅狀圖,其中直方圖支持3d效果。

9. 后臺處理

Tape一個輕快的,事務性的,基于文件的FIFO的庫

Android Priority Job Queue一個專門為Android輕松調度任務的工作隊列。執行定時任務什么的很方便。

10. 事件總線

EventBus安卓優化的事件總線,簡化了活動、片段、線程、服務等的通信

Otto一個基于Guava的增強的事件總線,

Android程序開發的過程中想要不同的組件之間進行有效的通信可以使用這個庫。通過otto庫可以

降低程序之間的耦合性。這個以后一定要用一下。

11. 響應式編程(好像新的語言一樣)

RxJavaJVM上的響應式擴展

RxJavaJoins為RxJava提供Joins操作

RxAndroidAndroid上的響應式擴展,在RxJava基礎上添加了Android線程調度

RxBinding提供用RxJava綁定Android UI的API

AgeraAndroid上的響應式編程

12. Log框架

Logger簡單,漂亮,強大的Android日志工具

Hugo在調試版本上注解的觸發方法進行日志記錄

Timber一個小的,可擴展的日志工具

13. 測試框架

MockitoJava編寫的Mocking單元測試框架,通過它很容易地測試項目中很少出現的邊緣情況(會話超時、服務器維護、特殊值),確保我們的應用正常運行。

RobotiumAndroid UI 測試

RobolectricAndroid單元測試框架

Android自帶很多測試工具:JUnit,Monkeyrunner,UiAutomator,Espresso等

14. 調試框架

Stetho調試Android應用的橋梁,使得可以利用Chrome開發者工具進行調試,很高端 = =;感覺暫時用不上。

15. 性能優化

LeakCanary內存泄漏檢測工具

ACRAAndroid應用程序崩潰報告

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容