Android面試、開發之高手 編碼規範與細節,android面試
注釋
【規則1】必須用 javadoc 來為類產生文檔。不僅因為它是標準,這也是被各種java 編譯器都認可的方法。
【規則2】在檔案的開始部分應該有檔案的說明資訊,應包含如下資訊:
(1)著作權資訊;
(2)檔案名稱;
(3)功能描述;
(4)作者;
(5)完成日期;
(6)版本資訊;
(1.1)eclipse類模版:
/**
* 2012 amsoft.cn
* 名稱:${file_name}
* 描述:${todo}.
* @author ${user}
* @date:${date} ${time}
* @version v1.0
*/
樣本:
/**
* 2012 amsoft.cn
* 名稱:AbDateUtil.java
* 描述:日期處理類.
*
* @author 還如一夢中
* @version v1.0
* @date:2013-01-18 下午11:52:13
*/
【規則3】變數名字要求含義明確,盡量加上注釋,每個變數中間加一個空行,格式如下:
/**錯誤碼*/
public String errorCode;
/**錯誤資訊*/
public String message;
【規則4】注釋應該增加代碼的清晰度,內容要清楚、明了,含義準確,防止注釋二義性。代碼注釋的目的是要使代碼更易於被同時參與程式設計的開發人員以及其他後繼開發人員理解。
【規則5】保持注釋的簡潔。最好的注釋應該是簡單明了的注釋。只需提供足夠的資訊,使別人能夠理解你的代碼。
【規則6】注釋與代碼應保持一致。修改代碼同時修改相應的注釋;不再有用的注釋要刪除。
【規則7】注釋應與其描述的代碼相近,對代碼的注釋應放在其上方,不可放在下面,如放於上方則需與其上面的代碼用空行隔開。
命名
【規則1】使用可以準確說明變數/欄位/類的完整的英文描述符。
【規則2】採用大小寫混合,提高名字的可讀性。一般應該採用小寫字母,但是類和介面的名字的首字母,以及任何中間單詞的首字母應該大寫。
【規則3】除了部分被大家公認的縮寫,盡量少用縮寫,如果有使用了縮寫則一定要注釋註明。
【規則4】 避免使用長名字(最好不超過15個字母)。
【規則5】避免使用相似或者僅在大小寫上有區別的名字。
【規則6】避免使用底線作為名字。以底線為首末字母的名字通常為系統保留,除預先處理定義之外,一般不用作使用者命名。更重要的是,底線經常造成麻煩而且難輸入,所以盡量避免使用。
【規則7】對於變數命名,禁止取單個字元(如 i、j、k...),除了要有具體含義外,還能表明其變數類型、資料類型等,但 i、j、k 作局部迴圈變數是允許的。
【規則8】package 的名字原則應該都是由一個小寫單片語成;如果 package 名字由多個單片語成,所有的單詞都應是小寫。
【規則9】屬性的命名必須遵循命名基本規範,建議按照匈牙利命名法進行命名。在某些情況下如果需要明確區分屬性和方法內部局部變數,建議屬性名稱以"m"為首碼,例如: mUser。
【規則10】類方法的命名應採用完整的英文描述符,大小寫混合使用:所有中間單詞的 第一個字母大寫。類方法名稱的第一個單詞常常採用一個有強烈動作色彩的動詞。樣本: openAccount() queryUser()。這種約定常常使人一看到類方法的名稱就能判斷它的功能。雖然這種約定要使開發人員多做一 些輸入的工作,因為類方法名常常較長,但是回報是提高代碼的可理解性。
【規則11】 靜態常量欄位(static final)全部採用大寫字母,單詞之間用底線分隔。 樣本:PREFS_NAME。
方法
【規則1】函數的規模盡量限制在 200 行以內。
【規則2】一個方法僅完成一件功能。如果一個方法實現多個功能,可以考慮分拆成多個方法,每個方法實現一個功能。
【規則3】如果多段代碼重複做同一件事情,那麼可考慮提供一個公用的方法實現這個功能,供其它方法調用。
【規則4】減少函數本身或函數間的遞迴調用。
【規則5】檢查函數所有參數輸入的有效性。例如參數傳入 ArrayList 對象為空白,如果直接使用會導致程式異常。
【規則6】對方法的異常中應有全面的處理,不要想當然在 try 塊中實現的功能中只可 能發生某一種異常,實際上可能會發生很多異常,如:IOException、NullPointerException 等,對拋出的異常最後應加上捕捉預設的 Exception,並進行處理。例:
try{
......
}catch(SQLException sqle){
......
//捕捉其它所有的Exception
}catch(Exception e){
//處理異常
......
}
【規則7】對所調用函數的錯誤返回碼要仔細、全面地處理。
【規則8】去掉沒有用、沒必要的變數、代碼。程式中的垃圾代碼不僅佔用額外的空間,而且很可能給程式的測試、維護等造成不必要的麻煩。
【規則9】位於 for 迴圈中作為計數器值的數字常量,除了1,0 和 1 之外,不應被直接 寫入代碼。
規則
【規則1】儘早釋放無用的對象。不用的對象應該及時賦為null。
String a = "一塊記憶體";
a = null;
【規則2】方法內建立對象或變數。一些局部使用的對象或變數應定義在方法內,一但方法返回,方法內建立的對象即符合GC回收條件,返回的對象除外。在下面例子中,方法返回後,其中的a、b 、strBuf 符合,c不符合。
private static String getSay() {
StringBuffer strBuf = new StringBuffer();
String a = "你好";
String b = "小明";
String c = null;
strBuf.append(a).append(b);
c = strBuf.toString();
return c;
}
【規則3】集合資料類型,包括數組,鏈表等資料結構。這些資料結構對GC來說,回收更為複雜,應該儘早將不用的引用對象賦為null。在下面兩段代碼中定義的對象都不能釋放,因為集合中還引用著這些對象,要釋放這些對象必須將它們從集合中移除,最簡單的方式時直接將集合置為null。
//程式碼片段1
List<Item> items = new ArrayList<Item>();
for(int j=0;j<100;j++){
Item item = new Item(String.valueOf(j));
items.add(item);
item = null;
}
//程式碼片段2
Item item = null;
for(int j=0;j<100;j++){
item = new Item(String.valueOf(j));
items.add(item);
item = null;
}
【規則4】儘可能少的使用全域變數,static全域變數,盡量用局部變數代替。這兩種方式都是靜態儲存方式,只是範圍不同,其中普通的全域變數作用於整個來源程式,而靜態全域變數作用於被定義的源檔案中,即其他源檔案內無法訪問。把局部變數改為靜態變數更改了它的儲存方式即生存周期,把全域變數改為靜態改變了它的範圍,所以原則時能用局部決不用全域。
【規則5】static變數在程式運行期間其記憶體是共用的,且只有一份,所以有時將一些變數聲明為static,可以起到節約記憶體空間的作用,但是由於靜態變數生命週期很長,不易被系統回收,所以使用靜態變數要合理,不能盲目的使用。
【規則6】類內私人常量盡量用final來聲明,程式中供全域使用的常量可以聲明為static final。
【規則7】盡量少用finalize函數。finalize函數是Java提供給程式員一個釋放對象或資源的機會。但它會加大GC的工作量。
【規則8】當程式有一定的等待時間,可以手動執行System.gc(),通知GC運行,但強制記憶體回收對於系統自動的記憶體回收機制會產生負面影響,會加大系統自動回收的處理時間,所以應該盡量避免顯式使用System.gc()。
【規則9】盡量少用finalize函數。finalize函數是Java提供給程式員一個釋放對象或資源的機會。但是,它會加大GC的工作量,因此盡量少採用finalize方式回收資源。
【規則10】在使用圖片資源過多時,使用軟引用(SoftReference)緩衝。使用軟引用定義的資源在記憶體不夠的時候會自動被系統回收。能夠最大限度的保證不產生OutOfMemory異常,一般用於緩衝的實現,但缺點是軟引用的對象初始化比較耗時,我們還要負責對象對回收後的重建工作,比較麻煩。
【規則11】適當的使用弱引用(WeakReference)。當定義了一個對象,用弱引用記住它後,在下一次GC運行時就會把它當作無用的對象回收,和軟引用的區別是不會根據記憶體情況判斷。
命名
【規則1】layout檔案的命名使用全部小寫字母加下橫線組合,每個英文描述符用下橫線分格(最好不超過3個),且只能以字母開頭和結束。
【規則2】名字的定義同Java。
【規則3】提示與文字資訊必須定義在string.xml中。
規則
【規則1】資料庫的操作,應記得關閉遊標和資料庫,在需要SimpleCursorAdapter時,可使用Activity.startManagingCursor(Cursor c)來管理遊標,使遊標的生命週期和Activity的生命週期一致;
【規則2】在自訂Adapter時一定要使用緩衝的convertView,標準的方法參照ListView相關章節;
【規則3】Bitmap對象在不使用時應先調用recycle() 方法釋放記憶體,再將對象賦為null;
【規則4】區分Application Context和Activity Context,不讓生命週期長的對象引用Activity Context,可以避免Activity不能被銷毀,對於生命週期長的對象,可以使用Application Context。
【規則5】在AndroidManifest.xml檔案中配置Activity時,可添加配置防止在橫豎屏切換時重新載入Activity,android:configChanges="orientation|keyboardHidden|navigation"。
【規則6】為了國際化和可維護性的需要,在String.xml中配置字串,在Java代碼中通過this.getResources().getString(int id)方法擷取。
【規則7】為了適應不同的解析度,不同的像素密度,布局推薦使用dip,文字使用sp。