軟件架構(gòu)
| MVC | MVP | MVVM | |
|---|---|---|---|
| 介紹 | Model:數(shù)據(jù)結(jié)構(gòu)相關(guān)的類 View:XML文件 Controller:Activity |
view:Activity,F(xiàn)ragment,Adapter等直接和UI相關(guān)的類 Model:數(shù)據(jù)結(jié)構(gòu)和操作相關(guān)的類 Presenter:作為View與Model交互的中間紐帶,處理與用戶交互的業(yè)務(wù)邏輯 iew interface:需要View實(shí)現(xiàn)的接口,View通過View interface與Presenter進(jìn)行交互 |
MVVM可以算是MVP的升級版,Model和View類似MVP VM是ViewModel的縮寫,ViewModel可以理解成是View的數(shù)據(jù)模型和Presenter的合體 |
| 優(yōu)點(diǎn) | 代碼結(jié)構(gòu)簡單 | view層和model層分離 可將一個Presenter用于多個視圖 方便單元測試 |
用戶直接交互的是View View和ViewModel是多對一的關(guān)系 View和ViewModel的雙向數(shù)據(jù)綁定 |
| 缺點(diǎn) | xml作為view層,可控性較差 view層和model層存在耦合 Activity代碼臃腫 |
由于通過接口進(jìn)行控制,接口粒度不好控制 UI驅(qū)動,要考慮線程及生命周期 V層和P層存在耦合 復(fù)雜業(yè)務(wù)也會導(dǎo)致P層代碼臃腫 |
由于去除了Presenter層,會導(dǎo)致view層依然過重 |
網(wǎng)絡(luò)加載框架
HTTP客戶端
| HttpClient | HttpURLConnection | OkHttp | |
|---|---|---|---|
| 介紹 | Apache的一個三方網(wǎng)絡(luò)框架 | 一個多用途、輕量級的http客戶端 | Square 公司封裝的一個高性能 http 請求庫 |
| 優(yōu)點(diǎn) | 網(wǎng)絡(luò)請求做了完善的封裝,api眾多,用起來比較方便,開發(fā)快。實(shí)現(xiàn)比較穩(wěn)定,bug比較少 | 由于API比較簡單,使得我們可以更加容易的去使用和拓展它 | 鏈接復(fù)用 Response 緩存和 Cookie 默認(rèn) GZIP 請求失敗自動重連 DNS 擴(kuò)展 Http2/SPDY/WebSocket協(xié)議支持 |
| 缺點(diǎn) | 由于其api眾多,是我們很難再不破壞兼容性的情況下對其進(jìn)行擴(kuò)展,在android5.0被廢棄,6.0逐漸刪除 | 它對網(wǎng)絡(luò)請求的封裝沒有HttpClient徹底,api比較簡單,用起來沒有那么方便 | okhttp請求網(wǎng)絡(luò)切換回來是在線程里面的,不是在主線程,不能直接刷新UI,需要我們手動處理。封裝比較麻煩 |
總結(jié):Android2.3以前適合使用HttpClient,而2.3以后適用于OkHttp,HttpURLConnection在Android4.4以后已將底層改用OkHttp,但是OkHttp使用時(shí)需要進(jìn)行一層封裝
封裝框架
| volley | Retrofit | |
|---|---|---|
| 介紹 | 一個簡單的異步http庫 | Square 公司出品的默認(rèn)基于 OkHttp 封裝的一套 RESTful 網(wǎng)絡(luò)請求框架 |
| 優(yōu)點(diǎn) | 支持圖像加載 自帶緩存,支持自定義請求 輕量級網(wǎng)絡(luò)交互,適合大量的,小數(shù)據(jù)傳輸。 |
徹底解耦 默認(rèn)使用 OkHttp ,性能上要比 Volley 占優(yōu)勢 支持同步、異步和RxJava |
| 缺點(diǎn) | 不支持 post 大數(shù)據(jù),不適合上傳文件 圖片加載性能一般 |
比較高的門檻 |
總結(jié):volley使用簡單,適合用于多次的小數(shù)據(jù)傳輸;Retrofit適用范圍較廣,API使用簡單,但有一定使用門檻,配合RxJava使用更佳
圖片加載框架
| Glide | Picasso | Fresco | |
|---|---|---|---|
| 介紹 | 2014年 Google 員工的開源項(xiàng)目 | 2013年 Square 開源的項(xiàng)目 | 2015年Facebook開源的圖片框架 |
| 優(yōu)點(diǎn) | 可接受Activity/fragment的context,控制生命周期 支持git 支持okhttp,Volley 內(nèi)存友好 2級緩存 |
自帶統(tǒng)計(jì)監(jiān)控功能 使用復(fù)雜的圖片壓縮轉(zhuǎn)換來盡可能的減少內(nèi)存消耗 |
圖片的漸進(jìn)式呈現(xiàn) 圖片存儲在安卓系統(tǒng)的匿名共享內(nèi)存,無OOM 很好的支持 GIF 自定義居中焦點(diǎn) |
| 缺點(diǎn) | 大小和方法數(shù)均大于Picasso(500k和2678) | 不支持git 無自動控制生命周期 2級緩存 |
包較大(2~3M) 使用復(fù)雜 |
總結(jié):Glide除了包較大幾乎擁有Picasso的所有優(yōu)點(diǎn),比較適合非專業(yè)的應(yīng)用中的圖片處理;Fresco擁有前面兩個庫的優(yōu)點(diǎn),但它的包很大,且使用門檻較高,比較適用于圖片需求較大的應(yīng)用