1. 程式人生 > >android命名規範和編碼規範

android命名規範和編碼規範

參考:《app研發錄》

程式碼是程式設計師的第二張臉。每一個程式設計師在嘲諷別人的程式碼的同時,有沒有想過自己的程式碼也會成為別人的談資呢?
制定規範不需要太多的理論知識,只要記住兩點就夠了:儘量簡單,多寫註釋。

Android命名規範

命名規範有以下幾點需要注意:

  • 命名不能反人類
    例如:PersonActivityAddCustomer.java
    所有的Activity全部是上述這種“模組名+Activity+頁面名”的命名方式

  • 要望文而知義,清晰準確
    比如說登入頁面的登入按鈕,命名時就不要想button1這樣隨心所欲,要類似於login_button(資原始檔)或btnLogin(java程式碼中的按鈕例項)這樣命名。

  • 此外,,遇到MyGridView之類的命名,就可以把建立檔案的同學拖出去打80大板了,而且要肚皮朝上的那種打法。

具體的規則:

  1. java類檔案命名的規則

    Activity的命名:以Activity作為字尾。比如說PersonActivity
    Adapter的命名:以Adapter作為字尾。比如說PersonAdapter
    Entity的命名:大多以Entity作為字尾。比如說PersonEntity。值得注意的是,user是全域性變數,不算實體,不受約束。

  2. 資原始檔命名規範
    頁面佈局檔案。注意都是小寫。person模組下的AddCustomerActivity–>act_person_addcustomer.xml
    ListView中的item佈局檔案。以item_作為固定字首,列表項的名稱作為字尾。例如:某個頁面下有一個使用者列表,空間名為lvUserList–>item_lvuserlist.xml
    Dialog佈局檔案。以dlg_作為固定字首,Dialog的功能名作為字尾。例如:dlg_hint.xml

  3. drawable目錄下檔案命名–大部分圖片、xml檔案,用於selector
    對於只在一個頁面使用的資源,就以該頁面的名稱作為字首
    對於只在一個模組下的多個頁面使用的資源,就以該模組的名稱作為字首。
    對於在各個模組、各個頁面都有可能使用的資源,比如說上導航、下導航,以common作為字首

  4. Java類中控制元件物件的命名
    控制元件類縮寫+控制元件的邏輯名稱(首字母大寫),比如登入按鈕,就可以命名為btnLogin

  5. Layout中控制元件的命名
    btnLogin –> btn_login

  6. string.xml中常量的命名
    layout中的控制元件使用,以該常量所在activity名做字首,後面接控制元件名稱,在後面自由發揮。登入頁面的按鈕上顯示的文字–>loginActivity_btnLogin_text.
    java程式碼中使用,可能activity中也可能工具類Utils中,規則和上面一樣。如果涉及和公共模組控制元件相關,就以common_作為字尾
    strings.xml:可以按照模組拆分成多個strings檔案
    values
    –>strings_module_a.xml
    –>strings_module_b.xml
    編譯打包時會自動將同類檔案進行合併。
    好處:各個模組維護各自的strings.xml。但常量命名時一定要以模組名作為字首,不然容易產生重新命名的情況,從而編譯出錯。

  7. 常量
    包含字母和下劃線,單詞之間用下劃線_隔開,字母全部大寫

android編碼規範

  1. 要分門別類存放各種類

  2. Layout中的常量,要在資源strings.xml中定義

    <TextViwe android:text="評論" ····/>

    要將“評論”這個常量定義在strings.xml中:

    <resources>
        <string name="tvPersonCenter">評論</string>
    </resources>

    然後在Layout佈局檔案中@string/呼叫
    Activity中的設定的一些變數,不能寫死,要定義在strings.xml中,然後從著資原始檔中取值

    String loadingMessage = this.getString(R.string.loadingmessage);
  3. Layout中所有控制元件的字型大小,都定義在dimens.xml中,它相當於網站的CSS樣式表

    <?xml version="1.0" encoding="utf-8"?>
    <resouces>
        <!--定義字型-->
        <dimen name="font_size_tiny">10sp</dimen>
        <dimen name="font_size_samll">12sp</dimen>
        <dimen name="font_size_normal">140sp</dimen>
        <dimen name="font_size_normal_high">16sp</dimen>
        <dimen name="font_size_larger">18sp</dimen>
        <dimen name="font_size_larger_high">20sp</dimen>
        <dimen name="font_size_xlarger">22sp</dimen>
        <!--邊距-->
        <dimen name="offset_2dp">2dp</dimen>
        <dimen name="offset_4dp">4dp</dimen>
        <dimen name="offset_6dp">6dp</dimen>
    </resouces>

    使用方法:

    <TextViwe android:textSize="@dimen/font_size_normal" ····/>

    對於所有控制元件的Margin偏移量,也需要統一規格,如上面的dimens.xml中定義,有若干尺寸事先定義好供選擇
    好處:稍微修改一下dimens.xml中的定義,就可以批量修改樣式
    做得更徹底,使用style來統一控制元件風格。如有必要,請用之

  4. 在activity中,定義新的生命週期,從而將onCreate方法拆分為一下3部分

    1. initVariables:初始化變數(包括Intent上的資料和Activity內部使用的變數)。

    2. initView:載入layout佈局檔案,初始化控制元件。

    3. loadData:呼叫MobieAPI

    拆分onCreate方法是設計模式中單一職責原則的體現

  5. 堅持使用fastJson自定義實體來作為MobileAPI的資料載體
    像JSONObject、JSONArray、HashMap<~,Objiect>、ArrayList<~,Objiect>這些不能序列化的實體,都禁止使用。除非它們僅僅是為了實現某個演算法,在方法類部臨時使用。實體自動化工具EntityGenerator。

  6. 頁面之間傳值,堅持使用Intent攜帶序列化實體資料的方式。禁止為了省事使用全域性變數進行傳值的方式。

  7. Activity中不要巢狀內部類,儘量獨立出來,該放哪兒放哪兒

  8. Adaper中的編碼規範如下

    1. 所有的Adaper,都放在adapter這個包中。

    2. Adapter繫結的資料,一律為ArrayList<自定義可序列化實體>

    3. 在Adapter中建立合適與列表自身的ViewHolder實體類。統一命名為ViewHolder

  9. 實體不要在不同模組間共享,但是可以在同一模組下的不同頁面間共享。比如說,不要在美食模組和酒店模組共用一個實體,但是在美食模組的列表頁和詳情頁,可以共用同意個實體。

  10. 為節省記憶體,請使用ArrayList<自定以實體類>,而不是HashMap.
    ArrayList雖然慢一點,每次查詢一個元素,都是o(n),而HashMap則o(l),但是ArrayList在記憶體的使用上要少於HashMap.對於android手機,尤其是配置很低的手機,我們開發App策略是儘量不佔太多記憶體,所以請選擇ArrayList<自定以實體類>。

  11. 圖片的處理,請統一使用第三方元件ImageLoader或Fresco來進行非同步載入。

  12. 什麼時候使用SharedPerferences?對於簡單的配置資訊,設定頁面的各種開關,這些都是要儲存在SharedPerferences中的。對於複雜的物件,比如說User類,比如說城市基礎資料,這些資料還是要儲存到本地檔案中。

  13. 儘量使用ApplicationContext代替Context,否則會引起記憶體洩漏。當然也不是任何地方ApplicationContext都可以代替Context。

  14. 資料型別轉換一定要進行校驗

  15. 使用常量代替列舉。眾所周知,列舉的每個值只能是一個整數,而沒有toString這樣的方法,所以不如在類中定義一個字串常量方便。