Android性能優化需要學習的點太多了。這里我只列舉我平時對與Android性能方面進行的一些優化。如果已經完成的項目,再去重構優化是一件很麻煩的事,所以最好在開發的時候,就注意這方面的問題。想要詳細了解Android性能優化方面的知識可以查看google官方的Android性能優化典范的視頻
java代碼編寫方面的性能優化
- 避免在內部調用Getters/Setters方法
在類的內部直接訪問源數據,會比使用geter,setter方法要來的快 - 多使用系統封裝好的API
系統Api很多在底層封裝的,效率會比自己寫的高很多。所以如果沒有特殊需求還是盡量使用系統Api - 使用增強型for循環語法
盡量使用增強for循環,在遍歷ArrayList時使用傳統的循環即可。 - 合理使用靜態方法
因為靜態方法在類加載時就已經加載完成了,運行效率要比非靜態方法快很多。 - 對常量使用static final修飾符
被static修飾的常量和靜態方法類似,類加載時就加載到內存里面了,同時如果被final修飾的常量會直接在dex文件中初始化。效率更高。按需選擇使用。 - 避免創建不必要的對象
首先規避無用的對象創建,盡量少的進行字符串以加號連接,多使用StringBuilder和StringBuffer,盡量避免使用自動裝箱的Integer等數據類型,對象越少垃圾越少,回收也就越少,性能也就越好。 - 避免使用枚舉
枚舉性能的確不行,沒有必要盡量不要使用 - 使用合適的算法和數據結構是優化程序的主要手段。
- 避免反射等機制
- 避免內存泄漏
Android開發中需要注意的性能優化
- Android界面渲染方面的優化
- 盡量少的進行多層級布局,有的布局嵌套幾層LinearLayout可能一個Relative就可以解決。
- 重復的布局使用引入的方式添加。
- 不確定是否需要加載的布局使用ViewStub進行填充,按需加載。
- 需求要求必須有相同的兩層ViewGroup那么使用Merge代替內部那個ViewGroup標簽。
如LinearLayout里面還有個LinearLayout就可以使用Merge標簽優化。 - 在高度自定義控件(重寫onDraw()方法的控件)中我們是無法通過工具查看布局情況的,所以這時候,我們應該盡量少的在onDraw方法中進行復雜的繪制,同時如果需要進行多層繪制重疊圖像達到自己的需求,那么需要使用clipRect方法來進行圖像疊加,避免重復繪制的情況發生。
- Service的使用
在使用Service來完成我們的功能時,應該盡量少的啟動Service,如果只是為了完成某些任務,那么任務完成時應該關閉Service
- 注意內存資源的釋放
- 每個Activity都會有onTrimMemory()這個方法,這個方法可以通過level監聽用戶離開這個界面了,這時候可以進行部分資源的釋放。
- 同樣的onTrimMemory()這個方法也可以監聽到內存下降的回調,這時候同樣可以通過level來判斷并進行資源的釋放。
- 避免在Bitmap上浪費內存
加載bitmap時,不要加載過大或者是不需要的圖片,圖片可以壓縮后在加載。