來到回家吃飯五個月了狐树!客戶端從Eclipse環(huán)境上遷移到Studio上變化比較大阱州,下面具體從以下幾方面總結(jié)下回家吃飯Android客戶端的變化:
1痛垛、使用動態(tài)代理AOP編程框架簡潔舅逸、高效開發(fā)
該動態(tài)代理框架的核心是通過dexmaker和Spring的攔截器實現(xiàn)AOP編程刽严;dexmaker是運行在Android DVM上蹬碧,利用Java編寫舱禽,來動態(tài)生成DEX字節(jié)碼的API。如果了解Spring AOP編程的話恩沽,應(yīng)該聽說過cglib or ASM誊稚,但這兩個工具生成都是Java字節(jié)碼,而DVM加載的必須是DEX字節(jié)碼罗心。所以里伯,想要在Android上進行AOP編程,Google 的dexmaker可以說是一個非常好的選擇渤闷。
輔助的還有注解和反射疾瓮,使用注解來標注同步、異步飒箭、加載框和加載顯示的文字狼电;反射回調(diào)繼承以下Base類子類的方法:
BaseAsyncActivity
BaseAsyncFragment
BaseAsyncListAdapter
BaseAsyncObject
同時著重使用系統(tǒng)的Handler并封裝為MessageProxy進行消息的分發(fā)與處理蜒灰。
封裝映射Map為ModelMap,方便回調(diào)時的數(shù)據(jù)傳遞肩碟。
因為公司項目是不外泄的强窖,具體可以參考:
2、使用OkHttp網(wǎng)絡(luò)庫提升安全及穩(wěn)定性
客戶端加入動態(tài)代理AOP編程框架后削祈,又開始更換網(wǎng)絡(luò)庫翅溺,去掉xUtils和Volley,使用OkHttp岩瘦。著重封裝為四種請求加載方式:
OkHttpGet
OkHttpPost
OkHttpDownload
OkHttpUpload
OkHttp是Google推崇的未巫,使用它不會擔心適配的問題和穩(wěn)定性,實際上現(xiàn)在封裝的網(wǎng)絡(luò)庫確實穩(wěn)定启昧。
同時叙凡,通過Java的SSL對稱加密和OkHttp結(jié)合,保護我們的數(shù)據(jù)安全不被攔截惡意篡改密末。
3握爷、AS 下使用Gradle快速構(gòu)建
客戶端從Eclipse環(huán)境上遷移到Studio上最大的益處就是使用Gradle快速構(gòu)建,通過maven和apt可以快速添加严里、使用和刪除第三方庫新啼。
在Gradle下使用統(tǒng)一的簽名方式,獨立配置簽名信息刹碾,在工程中不管debug還是release版都使用正式簽名燥撞,包括地圖的、推送迷帜、支付物舒、分享和友盟統(tǒng)計等。
多渠道打包戏锹,定義不同的product flavor, 并把AndroiManifest中的channel渠道編號替換為對應(yīng)的flavor標識冠胯。
自定義Build Type,可以使用默認的兩種debug測試版和release正式版锦针,還可以加入Grey測試版荠察。
Gradle下,壓縮資源奈搜、zip優(yōu)化悉盆、混淆代碼等控制方便,可以使客戶端包更小馋吗,不容易反編譯焕盟。
shrinkResources:壓縮資源
zipAlignEnabled:zip優(yōu)化
minifyEnabled:混淆代碼
4、抽象耗美、封裝加重構(gòu)多管齊下
以上三點的改變還是基礎(chǔ)性的調(diào)整京髓,在穩(wěn)固的基礎(chǔ)上我們要提高的就是代碼清晰的層次和健壯性;回家吃飯客戶端對多個界面商架、邏輯和功能進行封裝后抽象出來堰怨,方便以后維護。
重構(gòu)的界面有:
CodeLoginActivity:驗證碼登錄
RiskControlActivity:風(fēng)控驗證
KitchenDetailActivity:廚房詳情
MenuDetailActivity:菜品詳情
SearchActivity:搜索頁面
TakeWordActivity:捎句話
CouponActivity:優(yōu)惠券
抽象涉及到的:
DetailLoveDoubleDishView:愛心雙拼菜品
DetailLittleTableView:小飯桌菜品
DetailMenuDishView:菜品詳情
DetailRecommendDishView:推薦菜
DetailCommonDishView:普通菜
DetailCommentView:評論
自定義View封裝涉及到的:
ChoiceView:菜品選擇View
ShareView:分享View
ShoppingView:購物車
TicketView:家廚飯票
UploadImageView:上傳圖片View
還有各種Manager管理類和Util工具類
KitchenCartManager :購物車管理類
LocationManager:定位管理類
ShareManager:分享管理類
NavigateManager:路由跳轉(zhuǎn)管理類
DateUtil:時間工具類
FastJsonUtil:數(shù)據(jù)解析工具類
KeyBoardUtil:軟鍵盤顯示與隱藏工具類
SpecialViewUtil:文字顏色多樣化顯示工具類
5蛇摸、使用別人的好“輪子”
現(xiàn)在的開發(fā)都在追求高效和快速备图,所以一個高效快速的開發(fā)離不開別人穩(wěn)定的第三方庫,我們也不可能從零開始赶袄,先看看我們的這些“輪子”:
Butterknife:黃油刀揽涮,編譯時期的依賴注入,省去大量的findViewById重復(fù)操作
Logger:log打印利器饿肺,打印清晰蒋困,可以打印出對應(yīng)的log行數(shù)
Esperandro:SharedPreferences key-value存取利器
OkHttp:Google推崇的網(wǎng)絡(luò)庫
Fastjson:阿里的數(shù)據(jù)解析庫,用于網(wǎng)絡(luò)請求后的數(shù)據(jù)解析
Universal Image Loader:使用最普遍的圖片加載庫
MultiDex:解決App中方法數(shù)超過65535個的分包庫
Shape Image View:穩(wěn)定不會引起內(nèi)存泄漏的原型圖片庫敬辣,主要用于頭像的顯示
6雪标、性能優(yōu)化
產(chǎn)品 = 功能 + 性能,回家吃飯客戶端已經(jīng)在下面幾個方面進行了性能優(yōu)化:
LeakCanary:內(nèi)存泄露目前在項目中一般用leakcanary基本就能搞定溉跃,配置起來也相當簡單
ViewStub:View的延遲加載
過度繪制:使用RelativeLayout減少視圖樹的層級村刨,防止過度繪制
onTrimMemory回調(diào):應(yīng)用響應(yīng)此回調(diào)釋放非必須內(nèi)存,如圖片的內(nèi)存占用
lint檢查:通過Android Studio中的 Analyze->Inspect Code 對工程代碼做靜態(tài)掃描撰茎;找出潛在的問題代碼并修改嵌牺,去掉無用的圖片
?代碼優(yōu)化:去掉大量的臨時變量和部分全局變量,優(yōu)化for循環(huán)龄糊,建議使用增強for循環(huán)逆粹,在適當?shù)纳芷谥袆?chuàng)建釋放對象
7、實踐新技術(shù)
上面大概的總結(jié)回家吃飯Android客戶端的變化绎签,但是還會繼續(xù)變化枯饿,接下來的任務(wù)有:
重構(gòu)還沒有完,會繼續(xù)重構(gòu)其他頁面诡必,應(yīng)用AOP編程框架
升級OkHttp2.6到OkHttp3.2奢方,異步數(shù)據(jù)解析更加方便
使用Glide圖片庫和Realm數(shù)據(jù)庫
注意lint檢查,每次發(fā)版前通過lint檢查找出潛在的問題代碼并修改
修改工程的命名爸舒,使整個工程更加規(guī)范化
繼續(xù)調(diào)研插件化和熱更新蟋字,同時使整個工程模塊化
嘗試使用新技術(shù)到生產(chǎn)環(huán)境中,如RxAndroid扭勉、Retrofit鹊奖、Drager2等