仿煎蛋jiandan應用用戶端源碼,煎蛋jiandan
項目源碼下載:
http://code.662p.com/view/10654.html
<ignore_js_op>
<ignore_js_op>
項目整體介紹
從上面的也可以看出來,我們使用的是Material Design風格,但是並不純正,為了相容4.x版本,我們使用Theme.AppCampat相容主題、RecycleView和CardView來完成,從整體視覺效果來看比較統一和美觀。同時為了整體的效果,使用開源項目material-Dialogs來實現Material Design效果的對話方塊,這個在點擊回複,完善個人資訊的功能點上有所體現。
除了介面,網路請求架構我選擇的是Volley,原因是Volley對小資料量、請求頻繁的網路操作進行了最佳化,對於這個項目比較合適,而且作為Google的推薦項目,現在已經完善的比較成熟了,經過了很多項目的實戰驗證,所以比較放心。而且擴充性非常強,可以定製我們自己的請求解析需求,這一點相信看過我項目的朋友,應該有所感受,在com.socks.jiandan.net包下的請求類都經過了我的定製,使用方便。而且很重要的一點是,Volley在2.3之後是基於HttpURLConnection的封裝實現,預設支援gzip壓縮,在4.0之後的版本,還支援結果緩衝,所以在效能和資料轉送量上,相比HttpClient有很大的提高。
在本項目中一個很重要的功能就是載入圖片,所以在圖片載入架構上需要特別注意。最初我選擇的圖片載入架構是Fresco,因為之前翻譯過關於Fresco的特性的文章,感覺非常的強大,所以想試一試。但是在後面使用的時候,還是遇到了很多的問題,讓我不得不暫時放棄Fresco,改用UIL。原因如下:
- 推出時間太短,雖然功能強大,但是還沒經過考驗,還不很成熟。Fresco的更新頻率很快,我開始用的時候還是0.1.0版本,後來在載入圖片的時候遇到問題,在這個版本上,Fresco沒有對有304緩衝的圖片進行處理,所以在載入這類圖片的時候會出現失敗,我給Fresco項目提交issue之後,他們回複我,Fresco已經升級,在0.2.0完成了問題修複。所以我覺得,Fresco還需要一段時間的考驗和完善,才能被用到生產環境中,現在我不很推薦大家在項目中使用
- 不支援wrap_content。放棄Fresco的一個很重要的原因就是因為它不支援wrap_content,Fresco只支援match和固定長寬,在這個項目中需要展示大量寬度match,高度不定的圖片,因為Fresco顯示圖片的控制項也是自己定製的,所以自訂控制項這條路也比較難走,在沒有找到更好的解決方案的情況下,我決定暫時放棄Fresco,改用UIL。在本項目中,只有在評論列表頁的頭像是使用的Fresco,其他地方都是使用UIL和自訂控制項實現,具體實現方案我會在下面講到。
在IOC架構的選擇上,使用butter knife,之前一直使用AFinal,但是AFinal屬於運行期綁定,會影響效能,butter knife屬於編譯期綁定,不會影響。使用butter knife使用非常方便,就拿來一用。在本項目中,我感覺其實並不是很需要IOC,僅作一個嘗試而已,不必深究。
在完成網路狀態切換的功能上,需要在MainActivity註冊一個網路狀態監聽器,當網路狀態發生改變的時候,通知當前顯示的Fragment切換圖片的載入模式,或者是提示網路狀態變化情況。在這種需求下,使用介面是可以完成的,每個Fragment都實現MainActivity的一個介面,當網路狀態發生變化的時候,MainActivity調用Fragment的介面方法即可。但是這樣不僅很麻煩,而且會增加耦合性,為此,我使用EventBus完成了這個功能,實現很簡單,大家看源碼就可以,耦合度為0。
這個項目中的所有資料介面基本都是Json格式,所以選擇一個好的解析架構是很重要的。我之前寫過三篇文章介紹了Json的不同解析方法,雖然Jackson的解析速度快,但是gson確實用起來很熟悉,而且我們要解析的資料量並不大,效能上的差異微乎其微,所以我選擇了我比較熟悉的gson。在解析的一些地方還用到了一些JSON,這個大家可以自由選擇。
詳細說明:http://android.662p.com/thread-6263-1-1.html