提4點(diǎn)Android代碼規(guī)范

前言

良好的規(guī)范朵栖,就像軍隊(duì)紀(jì)律陨溅。
所謂绍在,沒有規(guī)矩,不成方圓件舵。

在編程中也是一樣的,良好的代碼規(guī)范總是能給人賞心悅目合武。哪怕讀不懂代碼稼跳,或者寫的代碼不夠優(yōu)秀,但給保持一個標(biāo)準(zhǔn)的規(guī)范也算一種態(tài)度吃沪。就像書面整潔一樣汤善,在高考中還能加分呢。

下面票彪,我們開始修煉吧~

1红淡、縮進(jìn)、換行:

  1. 縮進(jìn) 保持 ==4== 個字符降铸。

  2. 換行 有些代碼句(語句在旱、條件表達(dá)式、方法參數(shù))太長桶蝎,可選擇性換行。我們可規(guī)定為 ==>150== 字符換行谅畅。

    • 條件表達(dá)式:以操作符作為換行的開頭登渣。如果有多行,則每換一行毡泻,比上一行條件表達(dá)式的首字符增加縮進(jìn) ==2== 字符胜茧,成階梯式,清晰牙捉。低優(yōu)先級操作符處開始換行為宜竹揍;信息分組處換行。 即:
    if (isIgnoreRules && hasChangedContent() 
          || mOldCount < mNewCount) {
        // TO-DO         
    }
    
    • 方法參數(shù):
    public static void putData(int newsId, String newsTitle, String newsContent,
                               String from, String to) { 
        // TO-DO   
    }
    
    • {}的換行邪铲,特別注意try-catch-finally
    public void queryFromSQLite() {
        try {
            // TO-DO        
        } catch (Exception e) {     
            // cautch excetpion
        } finally {
            // release
        }
    }
    

2 芬位、條件+循環(huán),避免多層嵌套:

  1. 長代碼+多層嵌套带到,在程序塊}后加注釋標(biāo)記昧碉,便于閱讀。
  2. 一個方法里嵌套最好不要超過3層, ==最優(yōu)2層== 被饿!
    如:
    public void caculate() {
        if (!isNeedReCaculate) {
            return;
        }
        if (null != mData) {
            Object obj;
            for (int i = 0, size = mData.size(); i < size; i++) {
                obj = mData.get(i);
                if (null == obj) {
                    continue;
                }
                ...
            } // # End of for
        } // # End of (null != mData)
    }
    

3四康、資源規(guī)范

  1. colors.xml:
    忌寫:

    <resources>
      <color name="button_foreground">#FFFFFF</color>
      <color name="button_background">#2A91BD</color>
      <color name="comment_background_inactive">#5F5F5F</color>
      <color name="comment_background_active">#939393</color>
      <color name="comment_foreground">#FFFFFF</color>
      <color name="comment_foreground_important">#FF9D2F</color>
      ...
    <resources>
    

    可重用:

    <resources>
    
      <!-- grayscale -->
      <color name="white"     >#FFFFFF</color>
      <color name="gray_light">#DBDBDB</color>
      <color name="gray"      >#939393</color>
      <color name="gray_dark" >#5F5F5F</color>
      <color name="black"     >#323232</color>
    
      <!-- basic colors -->
      <color name="green">#27D34D</color>
      <color name="blue">#2A91BD</color>
      <color name="orange">#FF9D2F</color>
      <color name="red">#FF432F</color>
    
    </resources>
    
  1. string.xml:

  2. layout.xml:

    • id命名模式為: ==view縮寫模塊名邏輯名==,比如 btn_contact_search狭握。同時闪金,java中聲明對應(yīng)的view的命名規(guī)則與之反向,即 ==邏輯名_模塊名_view縮寫==论颅,比如 mSearchContactBtn哎垦。再者,這樣有一個好處——容易對應(yīng)恃疯,
      如view的聲明:
    Button mSearchContactBtn = findViewById(R.id.btn_contact_search);
    

    當(dāng)然漏设,我個人更喜歡這種格式:
    ==1. view的id命名:{模塊名}{邏輯名}{view的縮寫}==
    ==2. view在java中命名:m{View的縮寫}{模塊名}{邏輯名}==
    個人覺得這樣更好,比如當(dāng)搜索某個按鈕時今妄,你只需鍵入mBtn然后郑口,IDE就會自動補(bǔ)全提示所有的btn變量。

    Button mBtnSearchContact = findViewById(R.id.contact_search_btn);
    

4盾鳞、 分包管理

參考Google I/O 2015的代碼結(jié)構(gòu)犬性,按功能分包具體可以這樣做:

src
└─com
    └─domain
        └─app
            │  AppApplication.java  定義Application類
            │  Config.java          定義配置數(shù)據(jù)(常量)
            │
            ├─framework
            │      定義interface以及相關(guān)基類
            │
            ├─io
            │      數(shù)據(jù)定義(model)、數(shù)據(jù)操作(比如json解析雁仲,但不包括db操作)
            │
            ├─model
            │      定義model(數(shù)據(jù)結(jié)構(gòu)以及getter/setter仔夺、compareTo、equals等等攒砖,不含復(fù)雜操作)
            │      以及modelHelper(提供便于操作model的api)
            │
            ├─provider
            │      實(shí)現(xiàn)ContentProvider缸兔,及其依賴的db操作
            │
            ├─receiver
            │      實(shí)現(xiàn)Receiver
            │
            ├─service
            │      實(shí)現(xiàn)Service(比如IntentService),用于在獨(dú)立線程中異步do stuff
            │
            ├─ui
            │      實(shí)現(xiàn)BaseActivity吹艇,以及自定義view和widget惰蜜,相關(guān)的Adapter也放這里
            │
            ├─util
            │      實(shí)現(xiàn)工具類,提供靜態(tài)方法
            │
            ├─feature1
            │      Item.java                定義model
            │      ItemHelper.java          實(shí)現(xiàn)modelHelper
            │      feature1Activity.java    定義UI
            │      feature1DAO.java         私有db操作
            │      feature1Utils.java       私有工具函數(shù)
            │      ...其它私有class
            │
            ├─...其它feature

另外受神,google的sample~iosched:

java
└─com
    └─google
        └─samples
            └─apps
                └─iosched
                    │  AppApplication.java  定義Application類
                    │  Config.java          定義配置數(shù)據(jù)(常量)
                    │
                    ├─about
                    │      AboutActivity.java
                    │
                    ├─appwidget
                    │      ScheduleWidgetProvider.java
                    │      ScheduleWidgetRemoteViewsService.java
                    │
                    ├─debug
                    │  │  DebugAction.java
                    │  │  DebugActivity.java
                    │  │  DebugFragment.java
                    │  │
                    │  └─actions
                    │          DisplayUserDataDebugAction.java
                    │          ForceAppDataSyncNowAction.java
                    │          ForceSyncNowAction.java
                    │          ...
                    │
                    ├─explore
                    │  │  ExploreIOActivity.java
                    │  │  ExploreIOFragment.java
                    │  │  ExploreModel.java
                    │  │  ...
                    │  │
                    │  └─data
                    │          ItemGroup.java
                    │          LiveStreamData.java
                    │          MessageData.java
                    │          ...
                    │
                    ├─feedback
                    │      FeedbackApiHelper.java
                    │      FeedbackConstants.java
                    │      FeedbackHelper.java
                    │      ...
                    │
                    ├─framework
                    │      FragmentListener.java
                    │      LoaderIdlingResource.java
                    │      Model.java
                    │      ...定義interface并實(shí)現(xiàn)
                    │
                    ├─gcm
                    │  │  GCMCommand.java
                    │  │  GCMIntentService.java
                    │  │  GCMRedirectedBroadcastReceiver.java
                    │  │  ...
                    │  │
                    │  └─command
                    │          AnnouncementCommand.java
                    │          NotificationCommand.java
                    │          SyncCommand.java
                    │          ...
                    │
                    ├─io
                    │  │  BlocksHandler.java
                    │  │  HandlerException.java
                    │  │  HashtagsHandler.java
                    │  │  ...處理model
                    │  │
                    │  ├─map
                    │  │  └─model
                    │  │          MapData.java
                    │  │          Marker.java
                    │  │          Tile.java
                    │  │
                    │  └─model
                    │          Block.java
                    │          DataManifest.java
                    │          Hashtag.java
                    │          ...
                    │
                    ├─map
                    │  │  InlineInfoFragment.java
                    │  │  MapActivity.java
                    │  │  MapFragment.java
                    │  │  ...
                    │  │
                    │  └─util
                    │          CachedTileProvider.java
                    │          MarkerLoadingTask.java
                    │          MarkerModel.java
                    │          ...
                    │
                    ├─model
                    │      ScheduleHelper.java
                    │      ScheduleItem.java
                    │      ScheduleItemHelper.java
                    │      ...定義model以及實(shí)現(xiàn)model相關(guān)操作
                    │
                    ├─myschedule
                    │      MyScheduleActivity.java
                    │      MyScheduleAdapter.java
                    │      MyScheduleFragment.java
                    │      ...
                    │
                    ├─provider
                    │      ScheduleContract.java
                    │      ScheduleContractHelper.java
                    │      ScheduleDatabase.java
                    │      ...實(shí)現(xiàn)ContentProvider
                    │      (也在此處定義provider依賴的其它類抛猖,比如db操作)
                    │
                    ├─receiver
                    │      SessionAlarmReceiver.java
                    │
                    ├─service
                    │      DataBootstrapService.java
                    │      SessionAlarmService.java
                    │      SessionCalendarService.java
                    │
                    ├─session
                    │      SessionDetailActivity.java
                    │      SessionDetailConstants.java
                    │      SessionDetailFragment.java
                    │      ...
                    │
                    ├─settings
                    │      ConfMessageCardUtils.java
                    │      SettingsActivity.java
                    │      SettingsUtils.java
                    │
                    ├─social
                    │      SocialActivity.java
                    │      SocialFragment.java
                    │      SocialModel.java
                    │
                    ├─sync
                    │  │  ConferenceDataHandler.java
                    │  │  RemoteConferenceDataFetcher.java
                    │  │  SyncAdapter.java
                    │  │  ...
                    │  │
                    │  └─userdata
                    │      │  AbstractUserDataSyncHelper.java
                    │      │  OnSuccessListener.java
                    │      │  UserAction.java
                    │      │  ...
                    │      │
                    │      ├─gms
                    │      │      DriveHelper.java
                    │      │      GMSUserDataSyncHelper.java
                    │      │
                    │      └─util
                    │              UserActionHelper.java
                    │              UserDataHelper.java
                    │
                    ├─ui
                    │  │  BaseActivity.java
                    │  │  CheckableLinearLayout.java
                    │  │  SearchActivity.java
                    │  │  ...BaseActivity以及自定義UI組件
                    │  │
                    │  └─widget
                    │          AspectRatioView.java
                    │          BakedBezierInterpolator.java
                    │          BezelImageView.java
                    │          ...自定義小UI控件
                    │
                    ├─util
                    │      AboutUtils.java
                    │      AccountUtils.java
                    │      AnalyticsHelper.java
                    │      ...工具類,提供靜態(tài)方法
                    │
                    ├─videolibrary
                    │      VideoLibraryActivity.java
                    │      VideoLibraryFilteredActivity.java
                    │      VideoLibraryFilteredFragment.java
                    │      ...
                    │
                    └─welcome
                            AccountFragment.java
                            AttendingFragment.java
                            ConductFragment.java
                            ...

最后鼻听,

參考:

——————創(chuàng)建于 2017/04/20 by hsong
——————更新于 2021/03/22 by hsong

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末财著,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撑碴,更是在濱河造成了極大的恐慌撑教,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醉拓,死亡現(xiàn)場離奇詭異伟姐,居然都是意外死亡收苏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門愤兵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹿霸,“玉大人,你說我怎么就攤上這事秆乳∨呈螅” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵矫夷,是天一觀的道長葛闷。 經(jīng)常有香客問我憋槐,道長双藕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任阳仔,我火速辦了婚禮忧陪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘近范。我一直安慰自己嘶摊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布评矩。 她就那樣靜靜地躺著叶堆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斥杜。 梳的紋絲不亂的頭發(fā)上虱颗,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音蔗喂,去河邊找鬼忘渔。 笑死,一個胖子當(dāng)著我的面吹牛缰儿,可吹牛的內(nèi)容都是我干的畦粮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼乖阵,長吁一口氣:“原來是場噩夢啊……” “哼宣赔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞪浸,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤儒将,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后默终,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椅棺,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡犁罩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了两疚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片床估。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诱渤,靈堂內(nèi)的尸體忽然破棺而出丐巫,到底是詐尸還是另有隱情,我是刑警寧澤勺美,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布递胧,位于F島的核電站,受9級特大地震影響赡茸,放射性物質(zhì)發(fā)生泄漏缎脾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一占卧、第九天 我趴在偏房一處隱蔽的房頂上張望遗菠。 院中可真熱鬧,春花似錦华蜒、人聲如沸辙纬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贺拣。三九已至,卻和暖如春捂蕴,著一層夾襖步出監(jiān)牢的瞬間譬涡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工启绰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昂儒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓委可,卻偏偏與公主長得像渊跋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子着倾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫拾酝、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,119評論 4 61
  • 早上好卡者!#幸福實(shí)修#~每天進(jìn)步1%#幸福實(shí)修12班-02-駱金芳--富陽# 20171009(14/60) 【幸福...
    幸福實(shí)修金芳閱讀 190評論 0 2
  • Model.h #import <Foundation/Foundation.h>@interface Model...
    CGPointZero閱讀 909評論 0 2
  • 最近好萊塢似乎掀起了一股顛覆童話的潮流蒿囤。 原本的童話故事總是很美好的,而且這種美好總是有一個固定的模式的崇决,比如好人...
    LostAbaddon閱讀 804評論 2 2