16年過來,進了傳說中的某廠,福利不錯~~技術知識方面也有一些其他的收獲,總結如下,對比一下技術:
總體上來說,新東家程序員不用關心底層,只需關注業(yè)務邏輯和ui就好。
老東家需要自己定義的地方比較多
1. 架構上:
新東家 mvvm + DataBinding
豬廠那邊則是傳統(tǒng)mvc,比較笨重,一個Activity中代碼上1000行,業(yè)務邏輯全糅雜在里面了。
2. 三方庫:
新東家其實很少直接使用三方庫,一般都進行了些優(yōu)化借鑒參考或改寫,老東家直接拿來使用。
分情況說:
a. 網(wǎng)絡請求
新東家自己做了封裝了一套傳輸協(xié)議,比較高大上,平時寫代碼幾乎可以不用關心數(shù)據(jù)傳輸問題。網(wǎng)路請求只是個體力活,之間的封裝,抽象性均較高。朋友們可能注意到我使用的是幾乎不,是的,這里我就遇到一些坑,比如圖片,音頻上傳需求時就遇到過,一次灰度版本也遇到過改動底層協(xié)議的命名出現(xiàn)一個比較嚴重的大范圍crash,所以封裝程度高也有缺點,在做邏輯或修改時,不小心會踩坑。
前東家,恩,網(wǎng)絡框架整個借鑒流程。先AsyncHttpClient,然后引入Volley, 15年時引入okhttp + Gson(嚴格算和前面兩個不是同一類型),這里做的很不好的地方,雜糅太多框架,可擴展性較差,初次的架構沒考慮到以后,替換框架成本較大。離職的時候都還有前面兩個框架在里面,還準備引入retrofit也是醉了。
b 圖片框架
新東家,這里還是自己寫了一個圖片庫,使用較簡單,可配置性較高,然后同事添加上 DataBinding的bingdingAdapter后,簡單的圖片都不需要寫請求代碼,xml配置就好。復雜點使用配置屬性,就可以搞定。當然,databinding 也帶來些坑??梢詤⒄罩拔恼?a href="http://www.itdecent.cn/p/d82bb995db4d" target="_blank">http://www.itdecent.cn/p/d82bb995db4d 綜上,能滿足所有的要求,支持配置,使用較簡單。
老東家,圖片庫與網(wǎng)絡請求類似,Imageloader 然后部分替換Glide,替換和使用過程也遇到一些坑。 Glide還是很強大的,支持gif,代碼量不大(居中Fresco>Glide>Picasso)。 Picasso 優(yōu)勢在于可以選擇將網(wǎng)絡請求的緩存部分交給了okhttp實現(xiàn),Square的全家桶。Fresco天生缺點太大了。可參見這篇的思路改造下: http://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ==&mid=2247484509&idx=1&sn=0cd5005e1d8137cdba01315552bf49f3&chksm=eae1f10fdd9678198a15ba0938f7dc8909a7e2c2d16c58bc4c72e70c4e8b7ff50fb6bb7f68ed#rd
c 異步
這個兩家公司類似,參考Asycktask自己寫了一個,解決其版本不一致導致的串行和并行問題,以及請求數(shù)不操過128問題。
d 組件間 消息通知
新東家,這里也有兩個庫雜糅在一起,EventCenter ,LocalBroadcastManager。 第一個是參考Event bus 的,接口基本一致,但是優(yōu)化方面做的沒有Event bus 好。
老東家直接Event bus。
e 緩存
這里基本上一直 DB + sp及內存級
新東家DB 自己采用ORM + 注解封裝了下,注解消耗一定性能,但代碼量小和使用上較簡單。
老東家DB 自己寫sqlite helper,配置較高,可優(yōu)化較高,但實際工程中,需要優(yōu)化的地方不多。
f 混合框架
新東家自家的混合框架
老東家 ydk,JsBridge http://www.itdecent.cn/p/fce3e2f9cabc
g 一些其他的:
新東家,框架mvvm + DataBinding 框架,再加上抽象,基本上Activity代碼不超過10行,在fragment層級中進行處理。性能優(yōu)化方面,老東家確實不如,比如anr分析,traceView卡慢監(jiān)聽,代碼規(guī)范,內存泄漏等。 技術上,這邊多了些:比如換膚,熱修復,進程保活、jni編程。代碼混淆、自動化打包、持續(xù)集成(自己的)、項目管理svn(比較坑些)。
老東家:
dex分包另起進程加載優(yōu)化啟動速度,android-priority-jobqueue 線程管理 自動化打包、持續(xù)集成jenkins、項目管理git。
另外談談為嘛不引入RxJava
15年起,RxJava文章遍地走,其實我覺得其大而不當,能力不專。最核心能力就是異步并發(fā), 流式處理上,這個確實強大。一般而言,公司都形成了自己的異步框架。實際項目中多個線程的同步, android-priority-jobqueue這個庫基本可以滿足要求。其他網(wǎng)上的擴展的組件消息傳遞與EventBus性能上還是一定差距。至于其擴展的RxBinding, DataBinding基本上能替代。