Android藝術——效能最佳化問題

來源:互聯網
上載者:User

標籤:cal   ondraw   帶來   bitmap   記憶體佔用   效率   clu   現象   family   

這次分析方向,我們主要包括:布局最佳化、繪製最佳化、記憶體流失最佳化、響應速度最佳化、ListView最佳化、Bitmap最佳化、線程最佳化。

 

布局最佳化:盡量的減少布局的層級,這意味著Android繪製時的工作量會變少。

標籤:<include>的使用只支援Android:layout的開頭屬性

  <merge> 可以去除多餘的那一層LinearLayout

  ViewStub 繼承了View,本身不參與任何的布局和繪製過程,其意義在於按需載入所需的布局檔案,還不能支援<merge>標籤。

 

繪製最佳化:指的是View的onDraw方法要避免執行大量的操作;

1)onDraw中不要建立新的布局對象,這是因為onDraw方法可能會被頻繁調用,會一瞬間產生大量的臨時對象,佔用過多的記憶體導致系統更加頻繁gc,降低程式的執行效率。

2)onDraw不要做耗時的任務,過多的迴圈操作會搶佔CPU的時間片,這樣造成View的繪製過程不流暢。官方標準View的繪製幀率保證60fps是最佳。我們需要盡量降低onDraw方法的複雜度。

 

記憶體流失最佳化:記憶體流失並不會導致程式功能異常,但是會導致Android程式的記憶體佔用過大,會提高記憶體溢出的發生幾率。記憶體流失分析工具MAT。我們需要盡量規避潛在的記憶體流失。會存在情境:1.靜態變數導致的記憶體流失;2.單例模式導致的記憶體流失;3.屬性動畫導致的記憶體流失;具體以後詳解

 

響應速度最佳化:核心就是避免在主線程中做耗時的操作,採用非同步方式執行耗時操作。如果主線程做太多的耗時事情,會導致Activity啟動黑屏現象。會導致出現ANR,出現之後不要著急,通過分析traces檔案即可定位。

 

ListView和Bitmap最佳化:

ListView的最佳化無非在於

1)採用ViewHolder並且避免在getView中執行耗時操作;

2)根據列表的滑動狀態來控制任務的執行頻率;

3)嘗試開啟硬體加速來是ListView的滑動更加的流暢;

Bitmap最佳化之前已經說到過了,主要圖片的採樣,BitmapFactory.Options的inSampleSize參數。

 

線程最佳化:最重要的思想就是採用線程池,避免程式中存在的大量Thread。線程池可以重用內部的線程,從而避免了線程的建立和銷毀所帶來的效能開銷,同時線程池還能有效地控制線程池的最大並發數,避免大量的縣因為互相搶佔系統資源從而導致阻塞現象的發生。

 

其他最佳化建議:1)避免建立過多的對象;2)不要過多的使用枚舉,其佔有的記憶體空間要比整形大;3)常量使用static final來修飾;4)適當使用軟引用和弱引用;5)採用記憶體緩衝與磁碟緩衝;6)盡量使用靜態內部類;7)使用一些Android特有的資料結構。

Android藝術——效能最佳化問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.