標籤:
Java代碼最佳化
緩衝結果:
如果計算代價過高,最好把過去的結果緩衝起來。
虛擬碼如下:
result=cache.get(n); //輸入參數n作為鍵
if(result==null)
{
//如果在緩衝中沒有result值,就計算出來填進去
result=computeResult(n);
cache.put(n,result); //n作為鍵,
}
return result;
你可能打算一個HashMap充當緩衝,它可以勝任這項工作.不過,Android定義了SparseArray類,當鍵是整數時,它比HashMap效率更高。
因為HashMap 使用的是java.lang.Integer對象,而SparseArray使用的是基本類型int.因此使用HashMap會建立很多Integer對象,而使用
SparseArray則可以避免.
API
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
{
sparseArray.removeAt(1); //API等級11及以上
}
else
{
int key=sparseArray.keyAt(1); //預設實現慢一些
sparseArray.remove(key);
}
這類代碼很常用,它既可以使用最適當的API來擷取最好效能,也可以在舊的平台上(可能使用了較慢的API)正常運行.
資料結構:
如果你使用基於散列的資料結構(例如HashMap),而且鍵是自訂的對象,確保你正確覆蓋了類定義中的equal和hashCode
方法。hashCode的低劣實現可以輕易將散列的收益化為烏有.
每當Android新版本的發布,都要特別注意android.util包和java.util包.(因為幾乎所有的組件依賴這兩個工具箱).
響應能力:
應用可以延遲建立對象,直到需要時才建立,稱為延遲初始化的技術.
為Activity最佳化啟動序列:
onCreate->onStart->onResume (這個序列發生在建立Activity時),當配置發生變化時,當前Activity被銷毀,並建立一個新執行個體,會調用
以下序列:onPause->onStop->onDestory->onCreate->onStart->onResume
應用可以在mainfest檔案裡指定每個Activity元素的Android:configChanges屬性,讓它只接受自己想處理的配置變化。這會導致
調用Activity的onConfigurationChanged(),而不是銷毀.
通常情況下,在應用啟動時,既當onCreate()被調用時,啟用StrictMode。
SQLite
使用+運算子來連接字串不是最有效方法,而使用StringBuilder對象,或調用String.format可以提高效能.
Android應用效能最佳化筆記