必知必會 | Android 效能優化的方面方面都在這兒
大家在工作中或多或少都會拿自家的應用和競品app做比對,不可避免的需要做一些app效能優化的活。很多時候可能是策略上的調整,不過還是有非常多的通用的方式。
一般情況下,我們談效能優化基本上會從以下幾個方面:
App啟動速度優化
UI流暢度優化
記憶體優化
apk瘦身
電量優化
還有些網路速度優化、以及特定型別app的一些針對性的優化,比如播放器起播速度等…
我們重點談論上面5個方面。
效能優化正常的流程是,發現自己某方面與競品差距比較大,比如UI渲染速度,需要通過某種方式去發現為什麼比別人慢,往往需要利用一些工具,然後可以做一些針對性的調優(程式碼優化、實現方式改變等),當然了在調優的過程中會有一些通用性的調優方式可以幫助你。
所以本文從共性的角度來看,主要介紹的就是針對以上5個方面的檢測工具以及調優方式了。
App啟動速度優化
對於App啟動速度優化,一般情況下我們會利用主題去防止出現白屏;針對啟動速度慢,需要儘可能減少Application的onCreate中所要做的事情,比如一些不重要的SDK延遲或者非同步載入;多程序情況下一定要可以在onCreate中去區分程序做一些初始化工作;部分將要使用到的類非同步載入;還有針對multidex專門做優化的(當然這個隨著5.0以上的裝置越來越多,影響倒是沒有那麼大了)。
下面針對各個方面推薦一些文章:
Android效能優化(一)之啟動加速35%
Android冷啟動白屏解析,帶你一步步分析和解決問題
Android APP啟動優化
App啟動速度優化之耗時檢測處理
上面幾篇文章基本上描述了應用的啟動流程,如何優化白屏,以及一些SDK的懶載入等等…
美團Android DEX自動拆包及動態載入簡介
Android MultiDex初次啟動APP優化
其實你不知道MultiDex到底有多坑
這3篇可以幫助你對multidex做一定的瞭解,以及提供了優化方案供參考。
當然了,在檢測啟動優化上,除了利用adb命令去檢測總時間,還有就是去發現耗時的方法,可以利用TraceView,或者開啟StrictMode,如果你喜歡使用Log,還可以去使用hugo,或者自己寫一個類似的AOP日誌框架。
關於TraceView的使用可以參考:
TraceView 簡介及其案例實戰
使用 TraceView 找到卡頓的元凶
Android App優化之提升你的App啟動速度之例項挑戰
StrictMode比較簡單,就不描述了,hugo是Jake大神的一個開源庫,主要是利用aspectJ,原始碼很少,也比較簡單,不過使用起來還不錯,直接看readme就夠了,感興趣可以看下~
UI流暢度優化
談到UI流暢度,一般就是不要在主程序去做耗時的操作,提升UI的繪製速度(減少View的佈局層級,避免過渡繪製等)…TraceView、Lint、Hugo、StrictMode等…
這裡很容易想起Google在15年初google釋出了Android效能優化典範,還好視訊還被我找到了,文末有下載…
對於優化方案可參考:
Android效能優化(二)之佈局優化面面觀
Android UI效能優化實戰 識別繪製中的效能問題
效能優化之佈局優化
Android效能調優
當然了對於UI卡頓,不可避免的要引入檢測的方案:
一般有監聽Looper的日誌
利用Choreographer
可參考我之前編寫的:
Android UI效能優化 檢測應用中的UI卡頓
當然也相應的有一些開源工具:
記憶體優化
記憶體優化那麼主要就是去消除應用中的記憶體洩露、避免記憶體抖動;常用工具就是AS自帶的記憶體檢測,可以很好的發現記憶體抖動;leakcanary可以非常方便的幫助我們發現記憶體洩露;MAT可以做更多的記憶體分析。
當然了,你還可以瞭解一些記憶體相關的基礎知識。
Android效能優化(三)之記憶體管理
Android效能優化第(二)篇—Memory Monitor檢測記憶體洩露
記憶體洩露例項分析 – Android記憶體優化第四彈
Android最佳效能實踐(一)——合理管理記憶體
Android最佳效能實踐(二)——分析記憶體的使用情況
Android效能優化-記憶體洩漏的8個Case
Android 記憶體優化總結&實踐
Android記憶體優化之OOM
Android應用記憶體洩露分析、改善經驗總結
記憶體洩露從入門到精通三部曲之基礎知識篇
記憶體洩露從入門到精通三部曲之排查方法篇
手把手教你在Android Studio 3.0上分析記憶體洩漏
apk瘦身
關於Apk瘦身,主要由以下幾個方式:
利用ProGuard壓縮程式碼去除無用資源
andresguard進一步壓縮與混淆資源
第三方開源庫的瘦身,僅保留自己需要的部分
極致的圖片壓縮與webp的使用
合理配置去除不必要的配置,僅保留中文配置等…
so的優化與配置,只保留一類so
動態下發一些資源:字型檔、so、換膚包等;
以上僅有7比較麻煩,需要服務端的配合,此外對於動態下發So,可以參考tinker對So熱修復部分程式碼。
其餘都是常規方式,且1 ,5,6都比較簡單,build.gradle最下配置即可,當然了也有一些參考文章:
App瘦身最佳實踐
Android APP終極瘦身指南
Android效能優化(十)之App瘦身攻略
[Android技術專題]APK瘦身看這一篇文章就夠了
安裝包立減1M–微信Android資源混淆打包工具
愛奇藝Android移動客戶端app瘦身經驗
Android Webp 完全解析 快來縮小apk的大小吧
App優化攻略-用TextView顯示圖片
Android IconFont全攻略
電量優化
電量優化說實在的關注度較低,一般情況就是合理的使用一些感測器、謹慎的使用Wake Lock、減少後臺的不要的操作等…檢測可以利用battery-historian
Android效能優化(九)之不可忽視的電量
Android效能優化之電量篇
Android效能優化-電量優化
Android效能優化系列之電量優化
Android App優化之電池省著用
好了,大家可以將每個方案的所採用的實際的優化策略記錄下來,對每種方式提到的工具一定要自己去體驗,用起來肯定不會有多麼的困難,實操起來印象會更加深刻。
效能優化並不困難,重要的還是要去實際的去操作一把,基本上也是面試常見的問題了。
最後,好文非常多,本文希望僅起到拋磚引入的效果,感謝所有作者~
想起來了16年MDCC上明雲凶做過一個性能優化的分享,所以每次談到效能優化我都能想到當年演講的ppt。
這裡提供一下該ppt的下載以及Google的效能優化典範視訊,連結:https://pan.baidu.com/s/1kVHyCUb,懶得複製的可以公眾號內回覆1118即可。
對了,騰訊有個非常強大的手機上的“整合調測環境”,就是手機上的軟體,可以用於效能檢測,叫GT。