編輯:關於Android編程
從這篇文章開始我們暫停一下對android源碼的分析,開始講一下android產品研發中一些常用的技術,技巧,方法,實踐等姿勢。這裡需要強調的是我們所講解的這些東西可能對產品開發中比較常用的,因為對於項目開發中,可能更多的強調管理,進度方法的東西,對工程化的東西比較強調,而我們這裡更多的是對產品技術方面的歸納總結。
而本文中選擇將開發規范作為這個系列的第一篇文章,就是個人感覺產品研發過程中,開發規范真的很重要,很重要,非常重要(重要的事情說三遍),一個好的開發規范可以讓團隊中的人對他人的代碼更熟悉,新人也可以更好的了解產品的業務邏輯。開發規范並不是一個死的一成不變的,每個團隊可能都有自己的開發規范,只要是適合團隊的開發規范就是最好的開發規范。
所以本文中所講解的開發規范只能是拋磚引玉,有可取的地方可以借鑒,引用,不能照搬全抄不假思索,畢竟不同的團隊有不同的實際情況。最好的方式就是可以根據本文的開發規范總結出自身團隊比較適合的規范流程。
好吧,廢話不多說了,下面我們就介紹一下我在實踐中總結的android開發規范。
編碼規范對於程序員而言尤為重要,有以下幾個原因:
* 一個軟件的生命周期中,80%的花費在於維護
* 幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發人員來維護
* 編碼規范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼
* 如果你將源碼作為產品發布,就需要確任它是否被很好的打包並且清晰無誤,一如你已構建的其它任何產品
* 減少維護花費
* 提高可讀性
* 加快工作交接
* 減少名字增生
* 降低缺陷引入的機會
常量命名規范
常量用於保存需要常駐內存中並且經常使用變化不多的數據,定義常量的名稱的時候需要遵循望文知意的原則;
代碼中涉及到直接使用某個字符串或者其他基本類型的值時,建議定義成常量,避免多處直接使用同樣的值作為參數。
變量命名規范
變量用於保存系統中的臨時數據,變量命名時遵循望文知意,簡單明了,駝峰標示等原則。
無
方法命名規范
方法名的命名應該遵循簡單明了的原則;
類命名規范
類名主要表示一個類的作用,需要簡明扼要,望文知意,並且首字母大寫。
無
接口命名規范
接口命名需要簡單明了,長度不宜過長;
包名規范
用於分類管理類文件;
無
無
目錄名稱規范
主要是一些jar包,so文件的配置目錄名稱;
無
布局文件名稱規范
主要包含資源文件的命名問題;
無
如:如定義H5Activity的xml文件名稱,則可以定義為h5.xml;盡量不使用大寫字母等。
drawable文件名稱命名規范
主要包含資源文件的命名問題;
無
無
資源ID命名規范
各種資源ID的定義問題;
可以考慮按照組件的名稱的縮寫作為前綴,(同一個xml文件中ID名稱不能重復)如:組件簡寫(大寫字母縮寫)_業務名稱
TextView的組件:tv_pay_money
Button的組件:btn_pay_money
EditText的組件:et_user_name
LinerLayout組件:ll_container
如:比如一個textview組件,可點擊用於支付的按鈕,則可以把ID定義為: tv_pay_money;
在類、接口定義之前當對其進行注釋,包括類、接口的目的、作用、功能、繼承於何種父類,實現的接口、實現的算法、使用方法、示例程序等。
/**
* author:作者
* time:時間
* desc:描述
*/
方法注釋的模板:
/**
* desc:描述
* @param 參數名 參數描述
* @param 參數名2 參數描述
* @return 返回值類型說明
* @throws Exception 異常說明
*/
成員變量和常量需要使用如下注釋的形式,注釋位於變量的上側;
/**
*
**/
內部邏輯注釋模板:
//支付成功
if (response.getRet() == 0) {
Toast.makeText(H5Activity.this, "支付成功", Toast.LENGTH_LONG).show();
goToNext(response);
}
//支付失敗
else if (response.getRet() == -1) {
Toast.makeText(H5Activity.this, "支付失敗", Toast.LENGTH_LONG).show();
//刷新當前頁面
reflush(currentUrl);
}
在一個典型的Activity中代碼的順序如下:
/**
* author:sh
* desc:該class的作用
* time:yyyy-MM-dd
**/
public class ClassName {
//(1) 成員變量集合
//(2) 回調方法集合
若該類為activity,則:onCreate、**、onDestory;
若該類為Fragment、則:onCreateView、**、onDestory;
//(3) 其他方法集合
}
左大括號不換行,右大括號換行;
class MyClass {
int func() {
if (something) {
// ...
} else if (somethingElse) {
// ...
} else {
// ...
}
}
}
if (condition) {
body();
} // 推薦
if-else語句應該具有如下格式:
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
注意:if語句總是用”{“和”}“括起來,避免使用如下容易引起錯誤的格式:
if (condition) // 避免
statement;
一個for語句應該具有如下格式:
for (initialization; condition; update) {
statements;
}
當在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變量,而導致復雜度提高。
若需要,可以在for循環之前(為初始化子句)或for循環末尾(為更新子句)使用單獨的語句。
一個while語句應該具有如下格式:
while (condition) {
statements;
}
do {
statements;
} while (condition);
一個switch語句應該具有如下格式:
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
每當一個case順著往下執行時(因為沒有break語句),通常應在break語句的位置添加注釋。
定義異常的時候,異常的後綴名稱以Exception結尾,及**Exception;
盡量英文描述,簡單明了;
一個try-catch語句應該具有如下格式:
try {
statements;
} catch (ExceptionClass e) {
statements;
}
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
一般來說源文件的行數不能大於2K行,過多的話可以考慮拆分功能,拆分函數等;
在系統中需要打印LOG的時候,盡量使用自定義的LOG,自定義的LOG在開發環境的時候會打印日志,正式環境的時候不會打印日志。
在系統打印LOG的時候,使用TAG盡量使用tab,同意的TAG標志。
本篇總結了Android開發常見過程中的內存洩漏問題。集合類洩漏??集合類如果僅僅有添加元素的方法,而沒有相應的刪除機制,導致內存被占用。如果這個集合類是全局性的變量 (
最近看到一些應用在下載文件的時候,並沒有額外彈出進度條,而是很炫的使用啟動下載任務的Button直接顯示文件的下載進度,通過改變其背景色,從左向右推進,直到填滿整個But
之前的文章一直在介紹OC,最近也是在找急忙慌的學習IOS,所以Android方面的知識分享就有點中斷了,但是我現在還是要靠Android吃飯,所以不能Android的工作
ps:Espresso英文文檔,本人翻譯水平有限,可能存在不足Espresso的重要組成部分: 1.Espresso:通過onView()和onData()與view交互