開發安卓Apps,我所努力學習到的三十多條寶貴經驗
網上閱讀時獵取到的一篇外國工程師的文章,作者結合自己在安卓領域的摸爬滾打經歷總結了三十多條寶貴經驗,非常值得參考學習,故翻譯記錄于此,并作了一些補充說明,幫助閱讀理解。
學習領域有兩種人,一種是自身刻苦鉆研一步一步摸索的人,一種是采取捷徑獲取別人經驗的人。下面是我一路學到的東西,和你分享:
-
添加使用第三方類庫前,請再三思考,真的很重要;(未來一些未知的錯誤也許就發生在這些類庫中,關于第三方類庫的選擇,參考文章: stormzhang-如何正確使用開源項目? )
-
用戶看不到的地方,就不要去畫它;(避免過度繪制,參考文章: Optimizing Layouts in Android – Reducing Overdraw )
-
除非真的需要,否則不要使用數據庫;
-
應用中65K的方法數很快就能達到,我的意思是真的很快!不過 multidexing 也許能幫到你;(最近剛總結過一篇: Android 突破64K方法數的限制 )
-
RxJava 絕對是 AsyncTasks 等絕大多數類最好的替代品;(參考文章: Party tricks with RxJava, RxAndroid & Retrolambda )
-
Retrofit 是最優秀的網絡框架;(沒有之一)
-
使用 Retrolambda 縮減你的代碼;
-
感受 RxJava 與 Retrofit 和 Retrolambda 一起使用的魅力;(參考文章:參考文章: Party tricks with RxJava, RxAndroid & Retrolambda )
-
我使用 EventBus ,它很強大,但我不會過度使用,因為它會使代碼庫會變得很雜亂無章;
-
根據應用功能分包,而不是所屬類別;(項目目錄結構劃分,參考文章: Package by features, not layers )
-
移除Application線程里的一切代碼;(避免拖慢應用的初始化和啟動速度)
-
使用 lint 優化布局,以便你能一眼識別出冗余的視圖并移除;
-
如果你使用 gralde ,想盡一切辦法加快編譯速度;(參考文章: How I save 5h/week on Gradle builds )
-
使用 Profile report 查看編譯時間到底是在什么地方耗費的;
-
盡量使用眾所周知的成熟架構體系;(參考文章: Architecting Android…The evolution )
-
測試消耗時間,但是一旦你掌握了測試的竅門就會發現,它比沒有經過測試的代碼更快更穩妥;(參考地址: http://stackoverflow.com/questions/67299/is-unit-testing-worth-the-effort/67500#67500
-
使用 依賴注入 使你的應用更加模塊化,并且更容易測試;(參考文章: Tasting Dagger 2 on Android )
-
關注 Fragmened Podcast 對你大有幫助;(Fragmented,一個專屬安卓開發者的播客網站)
-
永遠不要使用私人郵箱作為安卓市場的發布者賬號;(主要是Google Play,案例參考: https://www.reddit.com/r/Android/comments/2hywu9/google_play_only_one_strike_is_needed_to_ruin_you/ )
-
堅持使用合適的輸入類型;(針對輸入框,參考鏈接: Specifying the Input Method Type )
-
學會借助分析學尋找通用模式和孤立問題;(設計模式,封裝等)
-
保持學習最新開源類庫,并借助 dryrun 工具測試開源類庫;( Android Arsenal ,一個搜索整合Android開源類庫的網站)
-
Service服務應該做它們需要做的事情,并且盡可能快地終止;
-
使用 Account Manager 提示用戶名和郵箱地址;
-
使用CI(持續集成)編譯構建測試版和發布版應用;
-
不要運行你自己的 CI server ,防止SSL攻擊而造成的磁盤空間、安全問題、服務更新都需要維持server,這是一件耗費時間的任務。使用 circleci 、 travis 和 shippable ,相比而言,性價比更高,更可靠;
-
使用 gradle-play-publisher 自動部署上傳Apk文件等信息到應用商店;
-
如果一個library比較大,而你只是用到其中的一小部分功能,那么你就應該尋找一個更小的替代品;(比如可以借助 proguard 工具)
-
不要大量使用超出你實際需要的依賴庫。特別是當這些依賴庫不是經常在變時,我們就要考慮到,這些類庫從頭編譯(CI Builds就是一個很好的例子)或者檢查之前編譯好的獨立類庫是否需要更新所花費的時間相比簡單地加載jar或者aar這樣的二進制文件,高達四倍之多;
-
開始考慮使用SVG代替PNG格式的圖片;(參考地址: Add Multi-Density Vector Graphics )
-
封裝抽象化library的使用,這樣當你需要使用新的library替代舊library時就會變得很容易;
-
監聽網絡連接變化和連接類型(Wifi狀態下數據更新更頻繁?);
-
監聽電源和電池電量變化(充電時數據更新更頻繁?電池電量不足時暫停更新?);
-
展現給用戶的UI就像一個笑話,如果你不得不解釋一下的話,它就不是一個好笑話;
-
性能測試很重要:Coding實現慢,但要正確,然后驗證優化,這不會影響任何測試內容。
來自:http://yifeng.studio/2016/10/27/android-develop-30-things-that-experience-made-me-learn-the-hard-way/