Android代碼優化(一)

最近在優化代碼,把一些優化的東西整理一下記錄,個人感覺代碼優化技術含量很高,暫且把此次的問題歸爲初級優化一,後續技術學深了,再去寫一篇優化之二

避免創建不必要的對象

對象的創建都是要佔用資源的,如果你在循環程序中創建對象,由於過多的佔用內存,你將定時的啓動內容回收機制,從而降低了運行速度。所以,當你不需要時,你應該避免創建類實例。

必須使用字符串時,考慮 當字符串不可變化時,使用String類型;當可變時使用StringBuffer類型。

當需要字符串+時,使用StringBufferString s = “aaa” + bbb”;

上面的語句實際上創建了三個String對象,性能受損。

StringBuffer s= new StringBuffer();

s.append(“aaa”);

s.append(“bbb”);

上面僅僅創建一個對象。

避免創建重複對象

String s= new String("abc");//永遠不要這麼幹!

Strong s = "abc";//改成這樣

多使用原始封裝的方法

當處理字符串時,應該多的使用像String.indexOf(),String.lastIndex(),以及與它們同等的方法。

避免在類內部進行Getters/Setters

     據說C++語言中,經常使用getterseg. i=getCount())而不用局部變量的形式(i=mCount),因爲編譯器可以通過內聯進入getters

但是在Android中,此習慣是不好的,因爲調用虛擬機的代價很高,比直接使用局部變量費時的多.所以,在公共的接口中定義getterssetters是可取的,當時,在類中,你應該直接通過局部變量來訪問。

如:

for (int i = 0; i < this.getCount(); i++)

應該寫爲:

  int mCount = this.getCount();
  for (int i = 0; i < mCount; i++)

多使用接口的具體實現類(Prefer virtual over interface)

當你要聲明一個HashMap對象時,你可以聲明它爲一個HashMap類,或一個Map 類:

Map myMap = new HashMap();   HashMap myMap = new HashMap();

哪一個更好的呢?

  PC機編程中,你應該更傾向與聲明爲Map,因爲你可以調用Map中提供的接口來實現更多的功能。但是在手機開發中,通過此種方法的調用,比直接調用方法多花費一倍多的時間。所以,當你用HashMap類,而且它滿足自己的需要,就不需要用聲明爲Map的方法。這個我單獨寫了個demo測試了一下,確實如此,至於根本原因還沒搞清楚,暫且先記住用法。

瞭解和使用庫

Java提供了強大而複雜的類庫,在完成某個常用功能之前,看看Java類庫中是否已經存在類似功能的類庫。一方面減少工作量,一方面使得自己的程序更加簡潔高效。例如:向量(Collection,Set,List…)中字符串的排序:Collections.sort(v)

忽略大小寫的排序:Collections.sort(v,String.CASE_INSENSITIVE_ORDER)

還有許多實用類庫,還需要平時多學習。

使用SparseArray代替HashMap<Integer,Object> 

SparseArray是android裏爲<Interger,Object>這樣的HashMap而專門寫的類,目的是提高效率,其核心是折半查找函數(binarySearch)。在Android中,當我們需要定義HashMap<Integer, E> hashMap = new HashMap<Integer, E>();時,我們可以使用後面的方式來取得更好的性能。SparseArray<E> sparseArray = new SparseArray<E>();

相應的也有SparseBooleanArray,用來取代HashMap<Integer, Boolean>,SparseIntArray用來取代HashMap<Integer, Integer>。

     這裏就先說這些大路邊上的,代碼優化水很深啊,還需要多潛進去研究學習才能寫出高效的代碼!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章