Android性能調優具體技巧 20+條(乾貨不止一點點)

轉載請標明出處:
http://blog.csdn.net/sinat_15877283/article/details/50854682
本文出自: 【溫利東的博客】

新項目1.0版本已經快接近尾聲,,,然而讓人頭疼的問題出來了,舊項目需要維護、改進;
看看以前的就項目蒙圈了“臥槽,這是什麼鬼!!!”,相信很多朋友都和我有同樣的感覺。和新項目比起來 舊項目就是一坨“shi”,然而“shi”還得自己鏟。
趁着這次機會,整理一下學到的性能優化技巧。


佈局:

  • 移除Window不必要的Background(Activity:setWindows().setBackgroudDrawable(null),Fragment:setBackgroud(null))
  • 巧用< merge/>標籤 優化佈局層數
  • 使用ClipRect & QuickReject 較少過度繪製(自定義)
  • 多用wrap_content, match_parent

內存

  • 使用佔內存少的對象:考慮使用ArrayMap/SparseArray(SparseBoolMap,SparseIntMap,SparseLongMap,LongSparseMap)代替HashMap等傳統數據結構。
  • 避免使用枚舉
  • 傳輸經過壓縮 gzip的數據
  • png圖片 使用 tinyPNG 進行有損壓縮
  • 長字符串處理使用 StringBuffer 代替 String
  • 大Bitmap 等比縮放 或者選擇 解碼格式(有透明度:ARGB_4444,無透明度:RGB_565)。
  • 內存最好是重複利用
  • 使用 for-each
  • 使用乘法代替除法(如 a*0.5 替換 a/2)
  • 注意緩存容器中的對象泄漏:如 避免handler 內存泄漏:onDestroy方法中調用handler.removeCallbacksAndMessages(null);
  • 注意監聽器的註銷:如 廣播 註銷。
  • 關閉資源對象:對SQLiteOpenHelper,SQLiteDatabase,Cursor,文件,I/O操作等都應該記得顯示關閉。
  • 避免頻繁網絡請求
  • 異常拋出,在合適的位置處理或者集中處理,不要搞的到處是catch,混亂且性能低,儘量不要在循環體中捕獲異常,以提升性能。

其他

  • 給網絡分級: 如在wifi下做下載視頻類工作。
  • 在gradle使用shrinkResources去除無用資源( shrinkResources true )
  • 刪除x86包下的so
  • 開啓線程池
  • 按鈕的感應範圍不小於9mm否則不易點擊(用padding 代替 外邊距)

調優工具:

  • HierarchyViewer:查看佈局
  • Monitor Memory查看Dalvik Heap的實時變化。
  • Allocation Tracker(內存分配跟蹤工具)
  • Heap Tool:查看當前內存快照,便於對比分析哪些對象有可能是泄漏了的。
  • 圖片壓縮:https://tinypng.com/

希望我的分享能對你有幫助,也希望你能提出你的意見和想法,一起分享,共同成長。
轉載請標明出處: http://blog.csdn.net/sinat_15877283/article/details/50854682


調試工具:

  • Hierarchy View:Hierarchy View 在Android SDK裏自帶,常用來查看界面的視圖結構是否過於複雜,用於瞭解哪些視圖過度繪製,又該如何進行改進。
  • Lint:Lint 是 ADT 自帶的靜態代碼掃描工具,可以給 XML 佈局文件和 項目代碼中不合理的或存在風險的模塊提出改善性建議。
  • Systrace:Systrace 在Android DDMS 裏自帶,可以用來跟蹤 graphics 、view 和 window 的信息,發現一些深層次的問題。很麻煩,限制大,實際調試中我基本用不到。
  • Track:Track 在 Android DDMS裏自帶,是個很棒的用來跟蹤構造視圖的時候哪些方法費時,精確到每一個函數,無論是應用函數還是系統函數,我們可以很容易地看到掉幀的地方以及那一幀所有函數的調用情況,找出問題點進行優化。
  • OverDraw:通過在 Android 設備的設置 APP 的開發者選項裏打開 “ 調試 GPU 過度繪製 ” ,來查看應用所有界面及分支界面下的過度繪製情況,方便進行優化。
  • GPU 呈現模式分析:通過在 Android 設備的設置 APP 的開發者選項裏啓動 “ GPU 呈現模式分析 ” ,可以得到最近 128 幀 每一幀渲染的時間,分析性能渲染的性能及性能瓶頸。
  • StrictMode:通過在 Android 設備的設置 APP 的開發者選項裏啓動 “ 嚴格模式 ” ,來查看應用哪些操作在主線程上執行時間過長。當一些操作違背了嚴格模式時屏幕的四周邊界會閃爍紅色,同時輸出 StrictMode 的相關信息到 LOGCAT 日誌中。
  • Animator duration scale:通過在 Android 設備的設置 APP 的開發者選項裏打開 “ 窗口動畫縮放 ” / “ 過渡動畫縮放 ” / “ 動畫程序時長縮放 ”,來加速或減慢動畫的時間,以查看加速或減慢狀態下的動畫是否會有問題。
  • Show hardware layer updates:通過在 Android 設備的設置 APP 的開發者選項裏啓動 “ 顯示硬件層更新 ”,當 Flash 硬件層在進行更新時會顯示爲綠色。使用這個工具可以讓你查看在動畫期間哪些不期望更新的佈局有更新,方便你進行優化,以獲得應用更好的性能。

參考:
http://hukai.me/android-training-performance-tips/
http://blog.csdn.net/sinat_15877283/article/details/50806272
http://hukai.me/android-training-managing_your_app_memory/
http://hukai.me/android-performance-battery/
http://blog.csdn.net/sinat_15877283/article/details/50776228
http://hukai.me/android-performance-patterns-season-2/
http://hukai.me/android-performance-patterns-season-3/
http://blog.csdn.net/sinat_15877283/article/details/50743402
http://hukai.me/android-performance-battery/
http://blog.csdn.net/sinat_15877283/article/details/50762297
http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=402380504&idx=1&sn=7013f0842867a21555adcf445c7c03ee#rd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章