Android應用優化方案

前言:

前面兩篇文章主要是講關於activity、fragment生命週期方面的總結,這篇文章主要是總結在android應用開發過程的優化方案,還有一些經常使用的優化工具。優化的方向包括:啓動速度、界面流暢性、內存使用狀況、apk體積、耗電量、流量等方面。android

app啓動速度

一、經過style 設置一個默認的啓動圖來過分,從交互體驗上來提升啓動速度git

二、分析application和首屏的業務邏輯異步初始化第三方組件,防止阻塞主線程(或者延遲初始化(用的時候再初始化))github

三、閃屏的2秒停頓能夠利用起來,把一些耗時操做延遲到這裏來初始化緩存

四、同工具DDMS中的TraceView來檢測耗時的點在哪裏,作針對的處理性能優化

五、mainActivity的onCreate流程,特別是UI的佈局與渲染操做,若是佈局過於複雜極可能致使嚴重的啓動性能問題;(能夠考慮先把mainActivity須要的數據請求回來),根據首頁的結構能夠考慮懶加載。網絡

Android APP啓動優化: wuxiaolong.me/2017/03/13/…架構

App啓動速度優化之耗時檢測處理: www.jianshu.com/p/a0e242d57…app

使用 TraceView 找到卡頓的元兇: blog.csdn.net/u011240877/…異步

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

界面流暢性

一、談到UI流暢度,通常就是不要在主進程去作耗時的操做,提高UI的繪製速度(減小View的佈局層級,避免過渡繪製等)

二、merge、include、ViewStub標籤的合理使用減小布局層級

三、自定義view的ondraw裏面不要作耗時的任務

Android UI性能優化實戰 :blog.csdn.net/lmj62356579…

性能優化之佈局優化: www.trinea.cn/android/lay…

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

方式1:通常有監聽Looper的日誌

方式二、利用Choreographer

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

github.com/markzhai/An… [方式1]

github.com/wasabeef/Ta… [方式2]

github.com/friendlyrob… [方式2]

內存優化

內存優化那麼主要就是去消除應用中的內存泄露、避免內存抖動。

一、安卓studio的內存分析工具 + mat能夠很好的檢測內存抖動和內存泄露

二、常見的內存泄露狀況:

● 單例:生命週期很長,會引用生命週期比較短的變量,致使沒法釋放。例如activity泄露

● 靜態變量:一樣也是應爲生命週期比較長

● 非靜態內部類建立靜態實例形成的內存泄漏

● handler內存泄露 (解決辦法:Handler 聲明爲靜態的,則其存活期跟 Activity 的生命週期就無關了。同時經過軟引用的方式引入 Activity)

● 匿名內部類(匿名內部類會引用外部類,致使沒法釋放,好比各類回調)

● 資源使用完未關閉(BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap)

● 複用問題(bitmap釋放)

Android 內存優化總結&實踐: mp.weixin.qq.com/s/2MsEAR9pQ…

Android內存優化之OOM: hukai.me/android-per…

Android應用內存泄露分析、改善經驗總結: zhuanlan.zhihu.com/p/20831913

apk體積優化

代碼瘦身

● 移除無用代碼、功能;

● 移除無用的庫、避免功能雷同的庫;

● 啓用Proguard;

● 縮減方法數;

●第三方開源庫的瘦身,僅保留本身須要的部分

資源瘦身

● 移除無用的資源文件;

● Drawable目錄只保留一份資源;

● 對圖片進行壓縮;

● PNG轉換JPG;

● 使用矢量圖;

● 使用WebP;

● 資源混淆;

● 資源在線化;

● 能不用圖片的就不用圖片實現,用代碼實現

So瘦身

● 在容許的狀況下,針對用戶機型分佈保留特定架構的So;

耗電量

電量是移動設備很是寶貴的資源,做爲一名開發者,有必要爲用戶着想,減小電量的消耗.調查顯示一般只有30%左右的電量是被程序核心的功能所消耗,好比界面渲染,剩下的70%則是被上報數據,位置更新,後臺通知所消耗.

如何檢測

一、手機選項中經過查看APP的電量消耗的統計數據

二、使用Battery Historian Tool來查看詳細的電量消耗

如何優化

●減小喚醒屏幕的次數與持續的時間,正確的使用WakeLock.

●延遲非必須的操做到充電狀態時,好比日誌上報徹底能夠在夜間充電時完成,這點能夠結合JobScheduler使用

●使用傳感器採集數據時,一旦不須要記得取消註冊.

●減小網絡通訊,合併通訊.

●合理使用定位功能,減小位置更新頻率以及根據實際狀況使用不一樣精度的定位需求

網絡優化

如今App幾乎都須要聯網操做,作好網絡優化一方面能夠提升體驗,另外一方面能夠減小流量和電量的損耗.另外,不管是對用戶仍是網絡服務提供者,網絡一樣是一種資源,任何開發者都不該該假設網絡資源是無限制的

如何檢測

●使用Android Studio裏的Network Traffic Tools來查看網絡請求

●使用Android Studio中的Monitor,安卓studio3.0新的性能分析工具更方便

●使用Fidder或者Charles等抓包工具分析網絡數據包

如何優化

●有必要的時候務必作好緩存,不管是圖片仍是普通的數據,使用LruCache和DiskLruCache構建本身的緩存系統,並根據實際場景設計緩存策略

●避免過分的網絡同步,合併相關的網絡請求

●根據實際場景肯定請求策略,避免使用固定的間隔頻率來進行網絡操做.好比鏈接WiFi並充電的狀況下請求頻率能夠高,第一次網絡請求失敗後可使用雙倍的時間間隔來進行下一次

●減小數據傳輸量,對傳輸的數據作壓縮.若是傳輸的是圖片,須要選擇合適的圖片格式以及根據顯示大小請求合適規格的圖片.對於普通數據,能夠考慮使用ProtocalBuffers來減少傳輸數據的大小.

相關文章
相關標籤/搜索