Android開發效能最佳化大總結

來源:互聯網
上載者:User

有時間了,我會不段更新!

一.Android相關

1.   採用硬體加速,在androidmanifest.xml中application添加android:hardwareAccelerated="true"。不過這個需要在android 3.0才可以       使用。android4.0這個選項是預設開啟的。

2.   View中設定緩衝屬性.setDrawingCache為true.
3.    最佳化你的布局。通過Android sdk中tools目錄下的layoutopt 命令查看你的布局是否需要最佳化。
4.    動態載入View. 採用ViewStub 避免一些不經常的視圖長期握住引用.
5.    將Acitivity 中的Window 的背景圖設定為空白。getWindow().setBackgroundDrawable(null);android的預設背景是不是為空白。
6.    採用<merge> 最佳化布局層數。 採用<include >來共用布局。
7.    查看Heap 的大小
8.    利用TraceView查看跟蹤函數調用。有的放矢的最佳化。
9.    cursor 的使用。不過要注意管理好cursor,不要每次開啟關閉cursor.因為開啟關閉Cursor非常耗時。 Cursor.require用於刷cursor.
10.  採用環形Buffer(可以採用鏈表資料結構實現)。可以設定一個鏈表長度的上限,根據手勢的變化來不斷地更新環形Buffer的內容。

11.  採用SurfaceView在子線程重新整理UI, 避免手勢的處理和繪製在同一UI線程(普通View都這樣做)。
12.  採用JNI,將耗時間的處理放到c/c++層來處理。
13.  有些能用檔案操作的,盡量採用檔案操作,檔案操作的速度比資料庫的操作要快10倍左右。
14.  懶載入和緩衝機制。訪問網路的耗時操作啟動一個新線程來做,而不要再UI線程來做。
15.  避免建立不必要的對象
16.  如果方法用不到成員變數,可以把方法申明為static,效能會提高到15%到20%
17.  避免使用getter/setter存取field,可以把field申明為public,直接存取
18.  static的變數如果不需要修改,應該使用static  final修飾符定義為常量
19.  使用增強for迴圈
    如:Set<Object> set = new HashSet<Object>();
           // for迴圈遍曆:
          for (Object obj: set) {
               if(obj instanceof Integer){
                     int aa= (Integer)obj;
               }else if(obj instanceof String){
                       String aa = (String)obj

                 } ........
           }
    缺點:在遍曆 集合過程中,不能對集合本身進行操作

             for (String str : set) {
                     set.remove(str);//錯誤!
             }
20.  私人內部類要訪問外部類的field或方法時,其成員變數不要用private,因為在編譯時間會產生setter/getter,影響效能。可以把外部類的field或方法聲明為包存取權限

21.  合理利用浮點數,浮點數比整型慢兩倍;

22.針對ListView的效能最佳化

item儘可能的減少使用的控制項和布局的層次;背景色與cacheColorHint設定相同顏色;ListView中item的布局至關重要,必須儘可能的減少使用的控制項,布局。RelativeLayout是絕對的利器,通過它可以減少布局的層次。同時要儘可能的複用控制項,這樣可以減少ListView的記憶體使用量,減少滑動時GC次數。ListView的背景色與cacheColorHint設定相同顏色,可以提高滑動時的渲染效能。ListView中getView是效能是關鍵,這裡要儘可能的最佳化。getView方法中要重用view;getView方法中不能做複雜的邏輯計算,特別是資料庫操作,否則會嚴重影響滑動時的效能。

二.JAVA相關

1 不用new關鍵詞建立類的執行個體,用new關鍵詞建立類的執行個體時,建構函式鏈中的所有建構函式都會被自動調用。但如果一個對象實現了Cloneable介面,我們可以調用它的clone()方法。clone()方法不會調用任何類建構函式。

在使用設計模式(Design Pattern)的場合,如果用Factory模式建立對象,則改用clone()方法建立新的對象執行個體非常簡單。例如,下面是Factory模式的一個典型實現:
public static Credit getNewCredit() {
       return new Credit();
}
改進後的代碼使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
      public static Credit getNewCredit() {
            return (Credit) BaseCredit.clone();
      }
上面的思路對於數組處理同樣很有用。
2 使用非阻塞I/O
版本較低的JDK不支援非阻塞I/O API。為避免I/O阻塞,一些應用採用了建立大量線程的辦法(在較好的情況下,會使用一個緩衝池)。這種技術可以在許多必須支援並發I/O流的應用中見到,如Web伺服器、報價和拍賣應用等。然而,建立Java線程需要相當可觀的開銷。
JDK 1.4引入了非阻塞的I/O庫(java.nio)。如果應用要求使用版本較早的JDK,在這裡有一個支援非阻塞I/O的軟體包。
3 慎用異常
異常對效能不利。拋出異常首先要建立一個新的對象。Throwable介面的建構函式調用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤資訊。只要有異常被拋出,VM就必須調整呼叫堆疊,因為在處理過程中建立了一個新的對象。
異常只能用於錯誤處理,不應該用來控製程序流程。
4 不要重複初始設定變數
預設情況下,調用類的建構函式時, Java會把變數初始化成確定的值:所有的對象被設定成null,整數變數(byte、short、int、long)設定成0,float和 double變可柚貿?.0,邏輯值設定成false。當一個類從另一個類派生時,這一點尤其應該注意,因為用new關鍵詞建立一個對象時,建構函式鏈中的所有建構函式都會被自動調用。
5 盡量指定類的final修飾符
帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。
另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使效能平均提高50%。
6 盡量使用局部變數
調用方法時傳遞的參數以及在調用中建立的臨時變數都儲存在棧(Stack)中,速度較快。其他變數,如靜態變數、執行個體變數等,都在堆(Heap)中建立,速度較慢。另外,依賴於具體的編譯器/JVM,局部變數還可能得到進一步最佳化。請參見《儘可能使用堆棧變數》。
7 乘法和除法
考慮下面的代碼:
for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
用移位操作替代乘法操作可以極大地提高效能。下面是修改後的代碼:
for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

8.不要隨意的使用stingA=StringB+StringC的寫法,有大量拼接操作的地方用StringBuilder代替。


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.