標籤:android效能最佳化 java最佳化 資料庫最佳化 布局最佳化
一、布局最佳化:
遵循一條規則:布局層次盡量少(RelativeLayout來代替LinearLayout、減少必要的節點、合理的使用<merge>標籤)
-
使用Lint分析布局
-
HierarchyViewer
-
使用ViewStub消極式載入視圖(最佳化那些不是必須要立即在UI上顯示的控制項)
- 採用<merge> 最佳化布局層數
- 採用<include >來共用布局
- 使用SDK的layoutopt工具來分析布局 來降低布局複雜度
-
針對ListView的效能最佳化
item儘可能的減少使用的控制項和布局的層次; RelativeLayout是絕對的利器,通過它可以減少布局的層次。同時要儘可能的複用控制項,這樣可以減少 ListView的記憶體使用量,減少滑動時GC次數。ListView的背景色與cacheColorHint設定相同顏色,可以提高滑動時的渲染效能。 ListView中getView是效能是關鍵,這裡要儘可能的最佳化。getView方法中要重用view;getView方法中不能做複雜的邏輯計算,特別是資料庫操作,否則會嚴重影響滑動時的效能。
參考:
http://rayleeya.iteye.com/blog/1961005
二、Java代碼最佳化:
-
緩衝(圖片緩衝、資料庫緩衝、對象資料緩衝等)
-
資料類型選取、對象設計(繼承、組合)、設計模式等
-
演算法邏輯(必要時候可用空間換時間)
-
異常用於錯誤處理,不是控製程序流程
-
提前或延遲操作
-
網路最佳化
- 使用NIO機制
參考:
http://developer.android.com/training/articles/perf-tips.html (java)
http://rayleeya.iteye.com/blog/1961005 (java)
http://www.trinea.cn/android/java-android-performance/ (java)
http://blog.csdn.net/innost/article/details/9008691 (Traceview)
三、資料庫最佳化:
-
索引(當某欄位資料更新頻率較低,查詢頻率較高,經常有範圍查詢(>, <, =, >=, <=)或order by、group by發生時建議使用索引; 經常同時存取多列,且每列都含有重複值可考慮建立複合索引)
-
批量插入、更新使用原子操作
-
查詢時返回更少的結果集及更少的欄位。
-
少用cursor.getColumnIndex(可以在建表的時候用static變數記住某列的index,直接調用相應index而不是每次查詢。)
-
有些能用檔案操作的,盡量採用檔案操作,檔案操作的速度比資料庫的操作要快10倍左右,
-
最佳化sql語句字串,自訂事務等
Android效能最佳化