1. 程式人生 > >android的編碼習慣

android的編碼習慣

今天大概看了一些別人的寫的關於的android設計規範和編碼習慣,覺得看了一遍並不是很有用,最好還是記下來吧

檔案 java檔案

  • 檔案的編碼格式為utf-8;

原始檔的結構

  1. 許可證和版權資訊
  2. package語句
  3. import語句
  4. 一個頂級類,和以上的每個部分都用一個空行隔開
    注意: import語句不要使用萬用字元,可以講引用類的static final 逐一引入

類的宣告

以前這塊一直不知道這塊怎麼處理,用android studio 一直追究著程式碼的排版格式。這裡為我提供了一種思路

類成員的順序

類的成員的順序,第一次分類以模組區別,比如說view的成員放在一塊,靜態常量放在一塊的,第二次分類,以邏輯和關聯性的分類,比如view可以採用自上而下的邏輯去給每個類命名和排版。總之不能用新的成員總是放在類的結尾,這樣的其實是按照時間的順序去放置類的成員的,而不是按照某種邏輯。

區塊的劃分

  1. 常量宣告區
  2. UI控制元件成員變數的宣告區
  3. 普通成員變數宣告區
  4. 內部介面的宣告區
  5. 初始化相關方法區
  6. 事件響應方法區
  7. 普通邏輯方法區
  8. 過載的邏輯方法區
  9. 發起的非同步任務方法區
  10. 非同步任務回撥方法區
  11. 生命週期回撥方法區
  12. 內部類宣告區

常量的宣告區

  • static final 型別的常量 所有單詞大寫,每個單詞以_來連線 public static final
  • 全域性常量:以g開頭,並且依照於駝峰原則 public static
  • 公有的非靜態的變數: 以p開頭,並且依照於駝峰原則 public
  • 私有靜態常量:以s開頭,並且依照於駝峰的原則 private static final
  • 私有的非靜態的變數:以m開頭 private
  • 預設的:不做處理。
//public static final ****
public static final ACTION_START = "ACTION_START";

// public static ****
public static gString ;

//public ***
public int pCount;

// private static final ** 
private static sInstance;

//private ***
private int mCount;

內部介面的宣告區

比如一些自定義的listener

初始化的相關的方法

以onCreate為主,initView()和initData();

事件響應的方法

bindEvent();

類成員的排列的通用規則

  1. 按照先後的發生順序
  2. 常量按照使用的先後順序
  3. ui控制元件成員變數按章的layout的檔案的中的先後順序
  4. 普通成員變數按照使用的先後順序
  5. 方法按照呼叫的先後順序的排列
  6. 相關功能作為一個小區塊放在一起

縮排

4個空格

列的限制

一行不超過80到100行,如果超出,需要自動換行,自動換行的對照的原則,
- 非賦值運算子處斷開
- 類雲演算法的處斷開
- 如果非要在賦值運演算法斷開,則在符號的末尾斷開
- 方法名或者建構函式與做括號在同一行
- ,與前面的內容在同一行
- 至少縮排8個字元

垂直空白

一個空白行
1. 類裡連續的成員之間:欄位,建構函式,方法,巢狀類,靜態初始化塊,例項初始化塊
2. 函式體內,語句的邏輯分組間
3. 類內的第一個成員前或最後一個成員後的空行
4. 多個連續的空行是允許的,但沒有必要這樣做
5. 同一成員,不同邏輯之間

具體的一些例項

列舉

列舉用逗號分隔

陣列

常見的宣告的方法常寫成塊狀結構的。

變數的宣告

採用第一次使用的時候,採取宣告變數,不要的在函式體的開頭將所有的變數都宣告
另外參考的不要重複或過多宣告的臨時變數比如

//不要採用下面的
for(int i = 0;i < 10;i++){
    int j = i;
}

//儘量改成這樣子的
int j = -1;
for(int i = 0;i < 10;i++){
    j = i;
}

switch語句

儘量講default的語句寫出,並且當出現fall throug的時候,儘量使用註釋,比如

switch(count){
    case 4:
        count--; //do count3 while count = 4;

    case 3:
        doCount3();
        break;
    case 2:
        doCount2();
        break;
    case 1:
        doCount1();
        break;
    case 0: 
        doCount0();
        break;
    default:
        break;
}

modifiers

當出現多個限定詞後,採用public protected private abstract static final transient volatile synchronized native strcitfp

命名的約定

這塊我覺得最為重要,畢竟每個人其實的命名規則是不一樣,這樣的話就會導致程式碼的易讀性存在一些問題,所以我們還是需要採用一些的在命名的規範的

android 整個工程的分包結構

mvc 的結構下

包的名稱 作用
ui 檢視層,其中可以fragment/activity等
serivce 整體結構使用的service
receiver broadcastReceiver
adapter 頁面使用adapter
utils 工具類
helper/compact 用於實現的協助類或者相容
data/db 有關資料庫的類
model 模型類
bean javabean
view/widget 自定義檢視類
api 介面層
constant 常量
base 基礎的類,常見的有baseActivity,baseFragment等

mvp 模式

幾本上和mvc差不多

包的名稱 作用
api 介面層
widget 自定義檢視層
model 模型層
presenter P層,用於處理activity和fragment的邏輯
view 管理的view層的邏輯的介面,activity去實現
service 服務層
receiver 廣播層

類名

採用大寫的駝峰原則,

類名 結尾
Activity XXXActivity
BroadcastReceiver XXXReceiver
Service XXXService
ContentProvider Provider
BaseXXX BaseXXX

資原始檔的命名規範

layout

  • contentview :activity/fragment_類名
  • dialog:dialog_描述
  • popupwindow:ppw_描述
  • 列表:item_描述

drawable

  • 用途模組名邏輯名稱限定詞:用途可以用檢視空間的簡寫,也可以用具體的用途,比如ic,bg_,限定詞為_pressed,_small,_normal等

anim

模組名_邏輯名稱:fade_in,可以省去模組名字

values

  • string :模組名_邏輯名稱:friend_title
  • colors:模組名邏輯名稱顏色;通用的顏色可以採用的顏色作為名字
  • styles: 模組名_邏輯名稱

layout id

採用 view的簡寫_view的邏輯名稱

常見的ui的變數宣告以及id宣告

控制元件 縮寫 ui變數的宣告 layout id的宣告
linearLayout ll mFriendLL ll_friend
RelativeLayout rl mFriendRL rl_friend
FrameLayout fl mFriendFL fl_friend
TableLayout tl mFriendTL tl_friend
Button btn mFriendBtn btn_friend
ImageButton ibtn mFriendIBtn ibtn_friend
ImageView iv mFriendIV iv_friend
TextView tv mFriendTV tv_friend
EditText et mFriendET et_friend
ListView lv mFriendLV lv_friend
GridView gv mFriendGV gv_friend

常見的英文的單詞,來用來的用途

名稱 縮寫
icon ic
color cl
divider di
selector sl
averager avg
background bg
buffer buf
control ctrl
delete del
document doc
error err
escape esc
increment inc
information info
initial init
image img
length len
library lib
message msg
password pwd
server srv
string str
temp tmp