Android 編碼規範V1.0
1 程式碼規範
1.1排版規範
1、原始檔編碼
- 所有原始檔編碼均為UTF-8
- 縮排為4個space,(不使用tab)
- 每行不超過200個字元,超過需要折行
2、空格、空行
- 左右的變數,操作符,引數之間必須加入空格
Bad Example:(操作符’if’、’=’的前後沒有空格)
Profile profile=getUserInfo(param.getReqHead().getUserId());
GetUserInfoResp resp=new GetUserInfoResp();
if(profile!=null){
BeanUtils.copyProperties (profile, resp);
}
resp.setUserType(authInfoService.getAuthStatus(param.getReqHead().getUserId()));
return resp;
Bad Example:(花括號沒有換行)
if(profile!=null){BeanUtils.copyProperties(profile, resp);}
3、屬性順序
方法的屬性順序為public、protected、private
4、大括號
列表內容
起始大括號不要單獨佔一行,結束的大括號獨立成行
Bad Example:
if (condition)
{
//do something
}
正確:
if (condition) {
//do something
}
2.若程式碼塊內只有一行語句,則也不能省略大括號。
Bad Example:
if (gpsFightInfo == null)
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 1.0f);
else
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 0.5f);
for (int i = 0; i < headers. length; i++)
headers[i] = headers[i].toLowerCase();
正確:
if (gpsFightInfo == null) {
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 1.0f);
} else {
showLoadingScreen(SCREEN_ACTION_RESUME, 0, 0.5f);
}
for (int i = 0; i < headers.length; i++) {
headers[i] = headers[i].toLowerCase();
}
1.2註釋
1、使用標準javadoc(CTRL+ALT+J)使用template
2、 public的/class/interface/enum需要註釋
3、 public的field/method需要註釋
4、 必須寫在上面,不能換行
Bad Example 1:
private Integer opType;// 0 新建 1修改
Bad Example 2:
// 0 新建 1修改
private Integer opType;
正確:
/** 操作狀態 0 新建 1修改 */
private Integer opType;
1.3命名規範
不要小看命名,不合適的命名會帶來很大的閱讀障礙,也加大後期的重構與維護成本。
1、基礎命名規範
- 包名
包名全部小寫,連續的單詞只是簡單地連線起來,不使用下劃線。
採用反域名命名規則,全部使用小寫字母。一級包名為com,二級包名為xx(可以是公司或則個人的隨便),三級包名根據應用進行命名,四級包名為模組名或層級名。
例如:com.cmcc.hemuyi.discovery
包名 | 此包中包含 |
---|---|
com.xx.應用名稱縮寫.activity | 頁面用到的Activity類 (activitie層級名使用者介面層) |
com.xx.應用名稱縮寫.base | 基礎共享的類 |
com.xx.應用名稱縮寫.adapter | 頁面用到的Adapter類 (介面卡的類) |
com.xx.應用名稱縮寫.util | 此包中包含:公共工具方法類(util模組名) |
com.xx.應用名稱縮寫.bean | 下面可分:vo、po、dto 此包中包含:JavaBean類 |
com.xx.應用名稱縮寫.model | 此包中包含:模型類 |
com.xx.應用名稱縮寫.db | 資料庫操作類 |
com.xx.應用名稱縮寫.view (或者 com.xx.應用名稱縮寫.widget ) | 自定義的View類等 |
com.xx.應用名稱縮寫.service | Service服務 |
com.xx.應用名稱縮寫.receiver | BroadcastReceiver服務 |
注意:
如果專案採用MVP,所有M、V、P抽取出來的介面都放置在相應模組的i包下,所有的實現都放置在相應模組的impl下。
class/interface/enum的命名使用PascalCase
AssetManager
Screen
ScreenTypemethod的命名使用camelCase
public void loadEssentialAssets();
4.private 或者protected field使用“m”字首(m的含義為member),其他部分使用PascalCase
private AssetManager mAssetManager;
5.static field使用g字首(g的含義為global),其他部分使用PascalCase
private static Class[] gClassArray;
6.constants的命名為FULL_UPPER_CASE,且用下劃線分割單詞
public static final int ACCESS_RANDOM = 1;
public static final String FONT_HP_PATH = "fonts/hp.fnt";
- enum中各欄位的命名為PascalCase,且每個欄位獨立成行
public enum Element {
Earth,
Hero,
WaterFire
}
- 命名必須是自解釋的、有意義的,不要用i、j、k等名字命名
2 、命名必須使用合理、常用的英文單詞,或行業術語,杜絕用冷門詞彙
- 縮寫的使用必須參考縮寫規範表,不在縮寫規範表裡的不許用
- Method名字需要是doSomething
- Class名字需要是NamePhrase(首字母大寫)
- 資料型別不需要加字首、匈牙利命名法
3、 基本資料型別命名規範
Integer:int+描述 Char:chr+描述 Boolean:bln+描述
Long:lng+描述 Short:shr +描述 Double:dbl+描述
String:str+描述 Float:flt+描述 Single:sng+描述
DataTime:dt+描述 Array:arr+描述 Object:obj+描述
如:String srtName;
4、 Java程式碼根據資源型別命名
- Activity命名:xxxxActivity
- Fragment命名:xxxxFragment
- View命名:xxxxView 或者 xxxxLayout
- Dialog命名:xxxxDialog
- Service命名:xxxxService
- BroadcastReceiver命名:xxxxReceiver
5、資原始檔命名
Layout檔案命名:
Activity的Content View應使用:activity_xxxx.xml 的形式
自定義View應使用:view_xxxx.xml
adapter的列表專案使用:item_xxxx.xml
dialog的佈局使用dialog_xxxx.xml
PopupWindow命名:ppw_xxxx.xmldrawable檔案
檔名全部小寫,寫明按鈕的具體作用和狀態,單詞之間使用下劃線連線。
login_normal.png
login_pressed.png
login_focused.png
xxxx_checked.png
xxxx_focused.png
xxxx_selected.png
xxxx_pressed.png
xxxx_disabled.png
xxxx_normal.png
多狀態drawable檔案命名xxxx_bg.xml
al_discovery_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_discovery_checked" android:state_checked="true"/>
<item android:drawable="@drawable/icon_discovery_checked" android:state_pressed="true"/>
<item android:drawable="@drawable/icon_discovery_normal" android:state_checked="false"/>
</selector>
- layout中的id命名
命名模式為:view的邏輯名稱_view縮寫
username_tv(展示使用者名稱的TextView)
2 工具使用規範
Android Studio 工具設定,主要是程式碼格式化設定:
file——》settings——》keymap在keymap中選擇eclipse,選擇了copy一下,保留原來的eclipse的快捷鍵版本,然後新增加了一個eclipse copy的快捷鍵版本。在搜尋框裡搜尋formatcode,確保快捷鍵是Ctrl+shift+F,這樣就和eclipse一樣的format方式。
自動化工具檢查程式碼規範
專案中配置checkstyle、PMD、findbugs,利用這幾個工具進行程式碼規範檢查,進而提到程式碼質量。
3 提高程式碼質量
(1)刪除無用的變數
(2)刪除無用的引入
(3)對於可以複用的部分,一定提取成共用的方法,減少程式碼量
(4)變數/方法命名一定要符合清晰易懂,不用太在乎長度
(5)程式碼完成後,進行code review,減少出錯機率
(6) 用適合的方式儘量去思考設計模式方式來進行開發
(7)程式碼書寫注意事項
- item框整個item點選範圍
- 文字長度限制,太長會導致的換行壓住別的控制元件的問題
- 彈出框生命週期
- 空指標判定
- list的 item都沒有了的空白頁提示
- list裡面進行刪除操作的時候,不能直接remove,否則會導致java.util.ConcurrentModificationException
- 按鈕多次點選處理方式
- json 請求響應物件,用基本物件型別,不用基本資料型別,比如用Integer,不用int 。這樣資料就沒有預設值,就是空。
- 使用RxJava 注意要訂閱和取消訂閱;