1. 程式人生 > >安卓開發規範參考

安卓開發規範參考

Android開發規範V1.0

一、命名規範:

1、簡介:總體命名都為英文字母拼接而成,對於常見的大家習以為常的單詞可以採用 縮寫形式,如常見的URLBUF等,較長的單詞可以取全面幾個字母形成縮寫。

駝峰命名法:第一個單詞的首字母小寫,其餘單詞的首字母大寫。

大駝峰命名法:每個單詞的首字母都大寫。

下劃線命名法:每個單詞用下劃線間隔開。

2、具體命名:

1)包名:採用四級包名形式。

第一級代表單位性質,如com代表公司,edu代表教育機構,個人的話就隨意了。

第二級代表公司或者教育機構的縮寫,如Tencent

第三級為專案的名稱,如扣扣專案的QQ

第四級為具體的功能分包,如base代表基礎包,

widgets代表元件包,utils代表工具包等等。

其餘級別可以自行進行延伸,如可以自己根據功能模組去分包,之後再每個模組內部再進行相應的分包即可,如XX模組下分bean包、activitys包、adapter包等,也可根據設計模式進行分包等,如XX模組下的View包,Presenter包等。

2)類名:採用大駝峰命名法。

^1、普通類名:直接採用大駝峰命名法即可。

^2Activity命名:採用大駝峰命名法,同時類名的最後一般以Activity結尾,如BaseActivity等。

^3Service命名:同Activity一致,如LocationService等。

^4BroadCastReceiver

命名:同Activity一致,如LoactionChangedBroadCastReceiver,也可縮寫為LoactionChangedReceiver等。

^5ContentProvider命名:同Activity一致,如ContactContentProvider,也可縮寫為ContactProvider等。

^6、自定義View的命名:採用大駝峰命名法,一般以父類的名字結尾,如CircleImageView等。

^7、資料庫類命名:一般以DBHelper結尾,如NewsDBHelper等。

^8Adapter類命名:一般以Adapter結尾,如GoodsAdapter等。

^9、公共類命名:一般以

Util或者Manager等結尾,如BitmapUtilHttpManager等。

^10、基礎類命名:一般以Base開頭,如BaseActivityBaseFragment等。

3)介面名:採用大駝峰命名法,一般以I開頭,或者為OnXXXListener,前者一般 實現某一部分功能,如IXXXPresenter去表示XXXPresenter要實現的方法;後者一 般在監聽回撥中用到,如OnClickListenerOnChangedListener

4)屬性名、變數名:採用小駝峰命名法。

^1、成員屬性(變數):一般以m開頭,如果是View的宣告,一般組成為m+View簡寫+功能,如登陸按鈕為mBtnLogin等;如果是一般屬性則為m+屬性名(+功能),如mDialogLogin,mInfo等。

^2、區域性變數:採用小駝峰命名法,一般能說明變數的用途即可,如index表示下標等。

5)方法名:採用小駝峰命名法。

-->採用動詞加名詞命名,說明方法的具體功能,常有的操作一般如下:

-->表初始化的一般用initXX()命名。

-->表判斷的一般用isXX()命名。

-->表獲取、設定、重置的一般用getXX()setXX()resetXX()命名。

-->表資料處理一般用到processXX()命名。

-->表彈出、提示、顯示的一般用displayXX()showXX()命名。

-->表儲存資訊、資料的一般用saveXX()命名。

-->表清除、移除、新增的一般用clearXX()removeXX()addXX()命名。

6)常量的命名:採用下劃線命名法。

-->常量命名一般全部大寫,每個單詞之間用下劃線隔開,如LOGIN_URL等。

7)資原始檔的命名:

^1layout資源:對應activity的一般為activity_xxx,對應fragment的一般為fragment_xxx,對應view的一般為view_xxx,對應adapter一般為item_xxx,其他的對應區域性的一般為item_xxx

^2drawable資源:選擇器一般命名為xxx_selector,形狀一般以xxx_circle,xxx_rect命名錶示圓形或矩形。

^3、圖片資源:一般為形態_功能,如btn_login等。

^4、字串資源、顏色:能說明用途即可,如padding_10等。

^5layoutid:一般為控制元件縮寫_功能,如登陸按鈕為btn_login等。

^6、動畫資源:一般為功能_方向,如fade_in表示淡入等。

二、排版規範:

1、簡介:排版直接展示了程式碼的樣式,規範、清晰的排版能夠助人更加快速/準確地理 解程式碼,常見的排版方式如程式碼縮排、空行分隔等。

2、具體排版:

^1、程式碼縮排:程式碼塊要進行程式碼的縮排,一般縮排為Tab,即4個空格,沒有代 碼縮排會使得程式碼是去層次感。

-->一般ifswitchforwhile等程式碼塊都要採用此縮排方式。

^2、一句一行:一般不要把多個短句放在一行,會使得程式碼看起來比較混亂。

^3、太長的語句進行分割:如果一個邏輯語句過長,則進行適當的分割,如 XX&&XX&&XX&&XX則可以分割如下:

XX

&&XX

&&XX

&&XX

^4、大括號的使用:一般在ifswitch等語句中如果執行程式碼只有一行可以省略大 括號,這裡不要省略,養成良好的編碼習慣,維護起來更加方便,也不容易出錯。

^5、欄位、方法的排序:一般遵循從public-->private的順序縱向排序。

^6、空行分隔:一般把一個程式碼塊中不屬於同一型別的操作用空行分隔開來,增加 程式碼的可讀性與可維護性。

三、註釋規範:

1、簡介:不規範、甚至缺失的註釋雖然不會影響程式碼的編譯與執行,但是對於後期代 碼的維護與重構卻造成了很大的麻煩,需要我們去話費大量的精力與時間去理解與維護,

因此規範的註釋在編碼中是非常必要的,一般源程式的程式碼註釋量要達到程式碼總量的 20%~30%

-->重要的類、函式的作用及原理、重要的欄位都是需要添加註釋的。

-->修改之後註釋也要及時修改,保證註釋與程式碼的一致性。

-->註釋分為單行註釋、多行註釋以及文件註釋。

2、具體註釋:

^1、類、介面註釋(文件註釋/**  */)

-->位置:public等修飾符之前,import關鍵字之後。

-->內容:功能簡述、@auther 建立者、@see 相關的類、方法(可選)、@since 品、模組版本、@deprecated 不建議使用(可選)。

^2、重要的成員變數、方法註釋(文件註釋/** */):

-->位置:需要註釋的成員變數或者方法的上面

-->內容:成員變數註釋說明成員變數的用途即可。

方法的註釋,包含功能簡述、@param引數說明(可選)、@return返回值說明(可 選)、@exception/@throws 丟擲異常說明(可選)、@see 關注的類/方法/成員變數、 @since起始版本、@deprecated 不建議使用(可選)

^3、重要操作的註釋(單行註釋//  或多行註釋/* */):

-->位置:操作的位置

-->內容:說明重要操作的內容,會產生的影響以及需要注意的事項。

^4、異常的註釋:

-->位置:自定義異常的類(文件註釋),丟擲異常的位置(單行註釋或者多行註釋)。

-->內容:自定義異常註釋類似於類和介面的註釋,但需要說明異常丟擲的情形以 及丟擲異常說明的問題/異常處理;丟擲異常的位置要說明異常丟擲的具體原因以 及發生異常應該如何處理,可能的異常原因等。

四、其他規範:

1、方法的抽離,方法儘量一個方法做一件事情,不要把太多不相干的操作放在同一個 方法中,一方面不利於理解,也不利於程式碼的維護與複用。

2、上行原則,對於一些類的公共屬性與方法,我們可以抽象一個父類,在父類中進行 屬性與方法的申明與操作,明確程式碼的層次性同時增加程式碼的複用率。

3、下行原則,對於一些類的屬性與方法具有特別明顯的個體特徵,我們則沒有必要放 在父類中,儘量新建相應的子類放在其中進行操作,這樣突出了明顯的個體特徵,也避 免了其他類繼承該類時繼承一些沒有必要的屬性與方法,比較臃腫與複雜,增加維護的 難度。

4、stringcolor資源分辨放在相應的目錄下,不要在java程式碼中直接寫字串。

5、一般常規、通用的方法直接封裝成工具類來使用(手機基本資訊獲取、螢幕尺寸 獲取、圖片加工、字串匹配等)。

6、彈出框、提示ToastSnackBar)等常用元件封裝起來統一管理,特殊需求特殊定製 即可。

7、儘量使用google官方元件實現功能,如下拉重新整理、側滑選單等在v7design等包中 都已經存在。

8、日誌資訊統一管理,可引入第三方日誌框架,如logger,也可以自己封裝管理,實 現可自由開關日誌輸出等操作。

五、UI優化建議:

1、layout元件化,架構層次清晰;

-->include標籤實現複用。

-->merge標籤減少巢狀層級。

2、對於重複出現的部分,使用style,對樣式進行復用。

3、複雜的佈局儘量採用相對佈局,避免巢狀層級過多。

4、實現自適應,使用dpsp為單位,不適用px為單位,同時可以使用權重進行區域性 的平分。

六、效能優化建議:

1ListView/GridView效能優化,ViewHolder實現程式碼控制元件複用

,也可使用recycleview代替來實現。

2、非同步任務:

網路請求,資料庫操作,檔案操作等耗時操作,放在子執行緒進行操作。

3、Bitmap處理:

Bitmap進行及時的回收處理操作。

4、大圖片可使用.9.png進行拉伸來實現。

5、字串拼接頻繁的時候不要頻繁使用+”來實現,可使用StringBufferStringBuilder 來實現。

6、監聽器要及時銷燬。

7、查詢操作等的Cursor需要及時關閉與銷燬。