1. 程式人生 > >android效能優化最佳實踐建議

android效能優化最佳實踐建議

為了寫出更加高效的程式碼,我們需要遵循兩個原則:
一 不要做沒有必要做的工作
二 不要分配多餘的記憶體
建議一:不要建立沒有必要的物件
建議二:如果不用獲取成員變數,建議方法使用靜態方法,這樣方法就不需要獲取物件的狀態,方法的呼叫也會提高15%~20%的速度

建議三:建議基本型別常量和String常量使用static final關鍵字修飾
例如下面帶程式碼

static int intVal = 42;
static String strVal = "Hello, world!";

編譯器會生成一個叫做<clinit>

的方法(該方法在類第一次被使用的時候會被執行)。該方法把42存在intVal,從類檔案的字元常量表中為strVal獲取一個引用。當這些值在後面被引用的時候,程式就可以從成員查詢表中獲取它們。
再看下面的程式碼,使用了final關鍵字來修飾常量

static final int intVal = 42;
static final String strVal = "Hello, world!";

這裡類就不需要clinit 方法了,因為靜態常量存在dex檔案的靜態成員初始化器中了。那麼程式使用intVal的時候就直接使用42,獲取strVal的時候就會直接使用字串常量,而不是通過成員的查詢來獲取,這樣開銷就會低。

總之,使用static final修飾的常量,我們獲取常量的時候直接從常量池中獲取,不需要結果從成員表查詢成員的步驟,沒有final修飾的常量,我們需要多進行一步成員查詢過程。

建議四:在類的內部,獲取成員值或者設定值的時候,不要使用getter和setter方法,直接操作成員變數

建議四:使用增強迴圈語法(for-each)

建議四:內部類需要訪問外部類成員的時候,成員使用package訪問許可權而不是private訪問許可權
由於VM認為一個類訪問另外一個的private成員是不合法的,所以會生成一個對應的package訪問許可權的靜態成員。這樣就會增加一些消耗。

建議五:慎重使用浮點型資料,因為整形資料的獲取速度是浮點型的兩倍

建議六:熟悉庫API,能夠使用庫提供的API解決的問題及不要去造輪子解決問題。其實庫API一般都會和本地庫API呼叫有關,這樣在效能上是經過優化

建議七:慎重使用本地函式(針對Android NDK程式設計),NDK程式設計需要和本地介面,JIT打交道,處理不當會造成效能問題