1. 程式人生 > >Android 性能優化的方面方面都在這兒

Android 性能優化的方面方面都在這兒

命令 移動客戶端 rap mda 實操 left 策略 rto 環境

又到周六了,鴻洋的不定期的周六放送又來了~~這次來談談性能優化吧。大家在工作中或多或少都會拿自家的應用和競品app做比對,不可避免的需要做一些app性能優化的活。很多時候可能是策略上的調整,不過還是有非常多的通用的方式。

一般情況下,我們談性能優化基本上會從以下幾個方面:

  • App啟動速度優化

  • UI流暢度優化

  • 內存優化

  • apk瘦身

  • 電量優化

還有些網絡速度優化、以及特定類型app的一些針對性的優化,比如播放器起播速度等...

我們重點談論上面5個方面。

性能優化正常的流程是,發現自己某方面與競品差距比較大,比如UI渲染速度,需要通過某種方式去發現為什麽比別人慢,往往需要利用一些工具

,然後可以做一些針對性的調優(代碼優化、實現方式改變等),當然了在調優的過程中會有一些通用性的調優方式可以幫助你。

所以本文從共性的角度來看,主要介紹的就是針對以上5個方面的檢測工具以及調優方式了。

1App啟動速度優化

對於App啟動速度優化,一般情況下我們會利用主題去防止出現白屏;針對啟動速度慢,需要盡可能減少Application的onCreate中所要做的事情,比如一些不重要的SDK延遲或者異步加載;多進程情況下一定要可以在onCreate中去區分進程做一些初始化工作;部分將要使用到的類異步加載;還有針對multidex專門做優化的(當然這個隨著5.0以上的設備越來越多,影響倒是沒有那麽大了)。

下面針對各個方面推薦一些文章:

  • Android性能優化(一)之啟動加速35%

http://www.jianshu.com/p/f5514b1a826c

  • Android冷啟動白屏解析,帶你一步步分析和解決問題

http://blog.csdn.net/guolin_blog/article/details/51019856

  • Android APP啟動優化

http://wuxiaolong.me/2017/03/13/appStart/

  • App啟動速度優化之耗時檢測處理

http://www.jianshu.com/p/a0e242d57360

上面幾篇文章基本上描述了應用的啟動流程,如何優化白屏,以及一些SDK的懶加載等等...

  • 美團Android DEX自動拆包及動態加載簡介

https://tech.meituan.com/mt-android-auto-split-dex.html

  • Android MultiDex初次啟動APP優化

http://blog.csdn.net/synaric/article/details/53540760

  • 其實你不知道MultiDex到底有多坑

http://t.cn/RjjhD95

這3篇可以幫助你對multidex做一定的了解,以及提供了優化方案供參考。

當然了,在檢測啟動優化上,除了利用adb命令去檢測總時間,還有就是去發現耗時的方法,可以利用TraceView,或者打開StrictMode,如果你喜歡使用Log,還可以去使用hugo,或者自己寫一個類似的AOP日誌框架。

關於TraceView的使用可以參考:

  • TraceView 簡介及其案例實戰

https://www.cnblogs.com/sunzn/p/3192231.html

  • 使用 TraceView 找到卡頓的元兇

http://blog.csdn.net/u011240877/article/details/54347396

  • Android App優化之提升你的App啟動速度之實例挑戰

http://www.jianshu.com/p/4f10c9a10ac9

StrictMode比較簡單,就不描述了,hugo是Jake大神的一個開源庫,主要是利用aspectJ,源碼很少,也比較簡單,不過使用起來還不錯,直接看readme就夠了,感興趣可以看下~

  • https://github.com/JakeWharton/hugo

2UI流暢度優化

談到UI流暢度,一般就是不要在主進程去做耗時的操作,提升UI的繪制速度(減少View的布局層級,避免過渡繪制等)...TraceView、Lint、Hugo、StrictMode等...

這裏很容易想起Google在15年初google發布了Android性能優化典範,還好視頻還被我找到了,文末有下載...

對於優化方案可參考:

  • Android性能優化(二)之布局優化面面觀

http://www.jianshu.com/p/4f44a178c547

  • Android UI性能優化實戰 識別繪制中的性能問題

http://blog.csdn.net/lmj623565791/article/details/45556391/

  • 性能優化之布局優化

http://www.trinea.cn/android/layout-performance/

  • Android性能調優

http://www.trinea.cn/android/android-performance-demo/

當然了對於UI卡頓,不可避免的要引入檢測的方案:

  1. 一般有監聽Looper的日誌

  2. 利用Choreographer

可參考我之前編寫的:

  • Android UI性能優化 檢測應用中的UI卡頓

當然也相應的有一些開源工具:

  • https://github.com/markzhai/AndroidPerformanceMonitor [方式1]

  • https://github.com/wasabeef/Takt [方式2]

  • https://github.com/friendlyrobotnyc/TinyDancer [方式2]

3內存優化

內存優化那麽主要就是去消除應用中的內存泄露、避免內存抖動;常用工具就是AS自帶的內存檢測,可以很好的發現內存抖動;leakcanary可以非常方便的幫助我們發現內存泄露;MAT可以做更多的內存分析。

當然了,你還可以了解一些內存相關的基礎知識。

  • Android性能優化(三)之內存管理

http://www.jianshu.com/p/c4b283848970

  • Android性能優化第(二)篇---Memory Monitor檢測內存泄露

http://www.jianshu.com/p/ef9081050f5c

  • 內存泄露實例分析 -- Android內存優化第四彈

http://www.jianshu.com/p/cbe2ee08ca02

  • Android最佳性能實踐(一)——合理管理內存

http://blog.csdn.net/guolin_blog/article/details/42238627

  • Android最佳性能實踐(二)——分析內存的使用情況

http://blog.csdn.net/guolin_blog/article/details/42238633

  • Android性能優化-內存泄漏的8個Case

  • Android 內存優化總結&實踐

https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ

  • Android內存優化之OOM

http://hukai.me/android-performance-oom/

  • Android應用內存泄露分析、改善經驗總結

https://zhuanlan.zhihu.com/p/20831913

  • 內存泄露從入門到精通三部曲之基礎知識篇

http://dev.qq.com/topic/59152c9029d8be2a14b64dae

  • 內存泄露從入門到精通三部曲之排查方法篇

http://dev.qq.com/topic/591522d9142eee2b6b9735a2

  • 手把手教你在Android Studio 3.0上分析內存泄漏

4apk瘦身

關於Apk瘦身,主要由以下幾個方式:

  1. 利用ProGuard壓縮代碼去除無用資源

  2. andresguard進一步壓縮與混淆資源

  3. 第三方開源庫的瘦身,僅保留自己需要的部分

  4. 極致的圖片壓縮與webp的使用

  5. 合理配置去除不必要的配置,僅保留中文配置等...

  6. so的優化與配置,只保留一類so

  7. 動態下發一些資源:字庫、so、換膚包等;

以上僅有7比較麻煩,需要服務端的配合,此外對於動態下發So,可以參考tinker對So熱修復部分代碼。

其余都是常規方式,且1 ,5,6都比較簡單,build.gradle最下配置即可,當然了也有一些參考文章:

  • App瘦身最佳實踐

http://www.jianshu.com/p/8f14679809b3#

  • Android APP終極瘦身指南

http://t.cn/RGjNpam

  • Android性能優化(十)之App瘦身攻略

http://www.jianshu.com/p/99f3c09982d4

  • [Android技術專題]APK瘦身看這一篇文章就夠了

http://www.jianshu.com/p/6be4f98162d7

  • 安裝包立減1M--微信Android資源混淆打包工具

http://t.cn/RjjVe4f

  • 愛奇藝Android移動客戶端app瘦身經驗

http://t.cn/RjjfzrY

  • Android Webp 完全解析 快來縮小apk的大小吧

  • App優化攻略-用TextView顯示圖片

  • Android IconFont全攻略

5電量優化

電量優化說實在的關註度較低,一般情況就是合理的使用一些傳感器、謹慎的使用Wake Lock、減少後臺的不要的操作等...檢測可以利用battery-historian

  • Android性能優化(九)之不可忽視的電量

http://www.jianshu.com/p/5d83d8649c98

  • Android性能優化之電量篇

http://hukai.me/android-performance-battery/

  • Android性能優化-電量優化

  • Android性能優化系列之電量優化

http://blog.csdn.net/u012124438/article/details/74617649

  • Android App優化之電池省著用

http://www.jianshu.com/p/c55ef05c0047

  • https://github.com/google/battery-historian

好了,大家可以將每個方案的所采用的實際的優化策略記錄下來,對每種方式提到的工具一定要自己去體驗,用起來肯定不會有多麽的困難,實操起來印象會更加深刻。

性能優化並不困難,重要的還是要去實際的去操作一把,基本上也是面試常見的問題了。

最後,好文非常多,本文希望僅起到拋磚引入的效果,感謝所有作者~

想起來了16年MDCC上明雲兇做過一個性能優化的分享,所以每次談到性能優化我都能想到當年演講的ppt。

這裏提供一下該ppt的下載以及Google的性能優化典範視頻,鏈接:https://pan.baidu.com/s/1kVHyCUb,懶得復制的可以公眾號內回復1118即可。

對了,騰訊有個非常強大的手機上的“集成調測環境”,就是手機上的軟件,可以用於性能檢測,叫GT。

http://gt.tencent.com/download.html

Android 性能優化的方面方面都在這兒