1. 程式人生 > >Android:android的框架區別(網路框架、圖片非同步載入與快取框架、資料框架)特點整理

Android:android的框架區別(網路框架、圖片非同步載入與快取框架、資料框架)特點整理

在我們安卓開發中,很多繁瑣的程式碼會很頭疼,編寫程式的週期會增加,因此很多框架都冒出來了,我們在搞懂底層原理之時,我們更應該學會用一些優秀框架來解決複雜程式碼,和繁瑣的重寫程式碼。因為針對最簡單的case,我只需要提供request url,成功時的callback和(或)失敗時的callback,僅此而已。這篇文章就大概的整理了一些框架的特點和區別,可以針對性的選擇開發。

一、網路框架:

1、android-async-http AsyncHttpClient:

  1. http請求發生在UI執行緒之外;

  2. 內部採用執行緒池來處理併發請求;

  3. GET/POST 引數構造,通過RequestParams類。

  4. 內建多部分檔案上傳,不需要第三方庫支援;

  5. 流式Json上傳,不需要額外的庫;

  6. 能處理環行和相對重定向;

  7. 和你的app大小相比來說,庫的size很小,所有的一切只有90kb;

  8. 自動智慧的請求重試機制在各種各樣的移動連線環境中;

  9. 自動的gzip響應解碼;

  10. 內建多種形式的響應解析,有原生的位元組流,string,json物件,甚至可以將response寫到檔案中;

  11. 永久的cookie儲存,內部實現用的是Android的SharedPreferences;

  12. 通過BaseJsonHttpResponseHandler和各種json庫整合;

  13. 支援SAX解析器;

  14. 支援各種語言和content編碼,不僅僅是UTF-8。

2、okHttp:

  1. 一般的get請求
  2. 一般的post請求
  3. 基於Http的檔案上傳
  4. 直接大檔案下載
  5. 載入圖片
  6. 支援請求回撥,直接返回物件、物件集合
  7. 支援session的保持

3、retrofit:
Retrofit與okhttp共同出自於Square公司,retrofit就是對okhttp做了一層封裝。把網路請求都交給給了Okhttp,我們只需要通過簡單的配置就能使用retrofit來進行網路請求了,其主要作者是Android大神JakeWharton。

優點:
1. 可以配置不同HTTP client來實現網路請求,如okhttp、httpclient等
2. 請求的方法引數註解都可以定製
3. 支援同步、非同步和RxJava
4. 超級解耦
5. 可以配置不同的反序列化工具來解析資料,如json、xml等
6. 使用非常方便靈活
7. 框架使用了很多設計模式(感興趣的可以看看原始碼學習學習)

這裡也列出缺點:

  1. 不能接觸序列化實體和響應資料
  2. 執行的機制太嚴格
  3. 使用轉換器比較低效
  4. 只能支援簡單自定義引數型別

4、volley

  1. 適用於應用都是屬於資料量不大,但網路通訊頻繁的;
  2. JSON,影象等的非同步下載;
  3. 網路請求的排序(scheduling);
  4. 網路請求的優先順序處理;
  5. 快取;
  6. 多級別取消請求
  7. 和Activity和生命週期的聯動(Activity結束時同時取消所有網路請求)

5、XUtils
DbUtils模組:
android中的orm框架,一行程式碼就可以進行增刪改查;
支援事務,預設關閉;
可通過註解自定義表名,列名,外來鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請註解表名和列名);
支援繫結外來鍵,儲存實體時外來鍵關聯實體自動儲存或更新;
自動載入外來鍵關聯實體,支援延時載入;
支援鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。
ViewUtils模組:
android中的ioc框架,完全註解方式就可以進行UI,資源和事件繫結;
新的事件繫結方式,使用混淆工具混淆後仍可正常工作;
目前支援常用的20種事件繫結,參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event。
HttpUtils模組:
支援同步,非同步方式的請求;
支援大檔案上傳,上傳大檔案不會oom;
支援GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
下載支援301/302重定向,支援設定是否根據Content-Disposition重新命名下載的檔案;
返回文字內容的請求(預設只啟用了GET請求)支援快取,可設定預設過期時間和針對當前請求的過期時間。
BitmapUtils模組:
載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;
支援載入網路圖片和本地圖片;
記憶體管理使用lru演算法,更好的管理bitmap記憶體;
可配置執行緒載入執行緒數量,快取大小,快取路徑,載入顯示動畫等…

6、Afinal
afinal是一個開源的android的orm和ioc應用開發框架,其特點是小巧靈活,程式碼入侵量少。
通過afinal的ioc框架,諸如ui繫結,事件繫結,通過註解可以自動繫結。通過afinal的orm框架,無需任何配置資訊,一行程式碼就可以對android的sqlite資料庫進行增刪改查操作。同時,afinal內嵌了finalHttp等簡單易用的工具,可以輕鬆的對http請求進行操作。

二、圖片非同步載入與快取框架:

1、android universal image loader

  1. 多執行緒下載圖片,圖片可以來源於網路,檔案系統,專案資料夾assets中以及drawable中等
  2. 支援隨意的配置ImageLoader,例如執行緒池,圖片下載器,記憶體快取策略,硬碟快取策略,圖片顯示選項以及其他的一些配置
  3. 支援圖片的記憶體快取,檔案系統快取或者SD卡快取
  4. 支援圖片下載過程的監聽
  5. 根據控制元件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap佔用過多的記憶體
  6. 較好的控制圖片的載入過程,例如暫停圖片載入,重新開始載入圖片,一般使用在ListView,GridView中,滑動過程中暫停載入圖片,停止滑動的時候去載入圖片
  7. 提供在較慢的網路下對圖片進行載入

2、picasso

  1. 在adapter中需要取消已經不在視野範圍的ImageView圖片資源的載入,否則會導致圖片錯位,Picasso已經解決了這個問題。
  2. 使用複雜的圖片壓縮轉換來儘可能的減少記憶體消耗
  3. 自帶記憶體和硬碟二級快取功能
  4. 使用ListView,GridView的時候,自動檢測Adapter的重用(re-use),取消下載,使用快取。
  5. 將影象進行變換,以更好的適應佈局控制元件等,減小記憶體開銷。
  6. 支援設定載入之前的圖片,和載入失敗後的圖片。
  7. 支援載入本地圖片和sdcard中的圖片檔案等。

三、資料庫框架

1、ormlite

優點:
文件較全面,社群活躍,有好的維護,使用簡單,易上手。

缺點:
基於反射,效率較低

2、GreenDao
優點:
效率很高,插入和更新的速度是sqlite的2倍,載入實體的速度是ormlite的4.5倍。官網測試結果
檔案較小(<100K),佔用更少的記憶體 ,但是需要create Dao,
操作實體靈活:支援get,update,delete等操作
另外GreenDao支援Protocol buffers協議資料的直接儲存 ,如果通過protobuf協議和伺服器互動,不需要任何的對映。

缺點:
學習成本較高。其中使用了一個java工程根據一些屬性和規則去generate一些基礎程式碼,類似於javaBean但會有一些規則,另外還有QueryBuilder、Dao等API,所以首先要明白整個過程,才能方便使用。沒有ORMLite那樣封裝的完整,不過greenDao的官網上也提到了這一點,正是基於generator而不是反射,才使得其效率高的多。

四、統計框架

1、MPAndroidChart詳解
1. 支援x,y軸縮放
2. 支援拖拽
3. 支援手指滑動
4. 支援高亮顯示
5. 支援儲存圖表到檔案中
6. 支援從檔案(txt)中讀取資料
7. 預先定義顏色模板
8. 自動生成標註
9. 支援自定義x,y軸的顯示標籤
10. 支援x,y軸動畫
11. 支援x,y軸設定最大值和附加資訊
12. 支援自定義字型,顏色,背景,手勢,虛線等

2、helloCharts

  • 支援縮放、滑動以及平移。Zoom(pinch to zoom, double tap zoom), scroll and fling
  • 支援自定義座標軸(比如座標軸位置:上下左右內部),支援自動生成座標軸。Custom and auto-generated axes(top, bottom, left, right, inside)
  • 動畫(Animations)
  • 支援預覽,即在chart下面會有一個座標密度更細的附屬chart,當選中附屬chart的某一區域,附屬chart上面的chart會顯示選中區域的更詳細情況。

    HelloCharts支援以下chart型別:

  • Line chart(cubic lines, filled lines, scattered points)
  • Column chart(grouped, stacked, negative values)
  • Pie chart
  • Bubble chart
  • Combo chart(columns/lines)
  • Preview charts(for column chart and line chart)

ps:
如果你需要很多的功能,各種組合,或者顯示,對介面沒有太大的要求的話就選擇MPchart。
如果你需要的是能滿足基本的圖表功能同時,還要兼顧美觀性,流暢性,強烈建議hellochart。