天天看點

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中定義

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

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

    然後在Layout布局檔案中@string/調用

    Activity中的設定的一些變量,不能寫死,要定義在strings.xml中,然後從着資源檔案中取值

  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>
               

    使用方法:

    對于所有控件的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這樣的方法,是以不如在類中定義一個字元串常量友善。