Android 编码规范V1.0

来源:互联网 发布:结构的刚度矩阵 编辑:程序博客网 时间:2024/05/29 10:06

1 代码规范

1.1排版规范

1、源文件编码

  1. 所有源文件编码均为UTF-8
  2. 缩进为4个space,(不使用tab)
  3. 每行不超过200个字符,超过需要折行

2、空格、空行

  1. 左右的变量,操作符,参数之间必须加入空格

Bad Example:(操作符’if’、’=’的前后没有空格)

  Profile profile=getUserInfo(param.getReqHead().getUserId());  GetUserInfoResp resp=new GetUserInfoResp();  if(profile!=null){        BeanUtils.copyProperties(profile, resp);  }  resp.setUserType(authInfoService.getAuthStatus(param.getReqHead().getUserId()));  return resp;

Bad Example:(花括号没有换行)

   if(profile!=null){BeanUtils.copyProperties(profile, resp);}

3、属性顺序

方法的属性顺序为public、protected、private

4、大括号

  1. 列表内容

    起始大括号不要单独占一行,结束的大括号独立成行

Bad Example:

if (condition){    //do something}

正确:

if (condition) {    //do something}

2.若代码块内只有一行语句,则也不能省略大括号。
Bad Example:

if (gpsFightInfo == null)    showLoadingScreen(SCREEN_ACTION_RESUME, 0, 1.0f);else    showLoadingScreen(SCREEN_ACTION_RESUME, 0, 0.5f);for (int i = 0; i < headers.length; i++)    headers[i] = headers[i].toLowerCase();

正确:

if (gpsFightInfo == null) {    showLoadingScreen(SCREEN_ACTION_RESUME, 0, 1.0f);} else {    showLoadingScreen(SCREEN_ACTION_RESUME, 0, 0.5f);}           for (int i = 0; i < headers.length; i++) {    headers[i] = headers[i].toLowerCase();}

1.2注释

1、使用标准javadoc(CTRL+ALT+J)使用template

2、 public的/class/interface/enum需要注释

3、 public的field/method需要注释

4、 必须写在上面,不能换行

Bad Example 1:

    private Integer opType;// 0 新建 1修改

Bad Example 2:

    // 0 新建 1修改    private Integer opType;

正确:

    /** 操作状态 0 新建 1修改 */    private Integer opType;

1.3命名规范

不要小看命名,不合适的命名会带来很大的阅读障碍,也加大后期的重构与维护成本。

1、基础命名规范

  1. 包名
    包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
    采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名。
    例如:com.cmcc.hemuyi.discovery
包名 此包中包含 com.xx.应用名称缩写.activity 页面用到的Activity类 (activitie层级名用户界面层) com.xx.应用名称缩写.base 基础共享的类 com.xx.应用名称缩写.adapter 页面用到的Adapter类 (适配器的类) com.xx.应用名称缩写.util 此包中包含:公共工具方法类(util模块名) com.xx.应用名称缩写.bean 下面可分:vo、po、dto 此包中包含:JavaBean类 com.xx.应用名称缩写.model 此包中包含:模型类 com.xx.应用名称缩写.db 数据库操作类 com.xx.应用名称缩写.view (或者 com.xx.应用名称缩写.widget ) 自定义的View类等 com.xx.应用名称缩写.service Service服务 com.xx.应用名称缩写.receiver BroadcastReceiver服务

注意:
如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下。

  1. class/interface/enum的命名使用PascalCase
    AssetManager
    Screen
    ScreenType

  2. method的命名使用camelCase

public void loadEssentialAssets();

4.private 或者protected field使用“m”前缀(m的含义为member),其他部分使用PascalCase

private AssetManager mAssetManager;

5.static field使用g前缀(g的含义为global),其他部分使用PascalCase

private static Class[] gClassArray;

6.constants的命名为FULL_UPPER_CASE,且用下划线分割单词

public static final int ACCESS_RANDOM = 1;public static final String FONT_HP_PATH = "fonts/hp.fnt";
  1. enum中各字段的命名为PascalCase,且每个字段独立成行
public enum Element {    Earth,    Hero,    WaterFire}
  1. 命名必须是自解释的、有意义的,不要用i、j、k等名字命名

2 、命名必须使用合理、常用的英文单词,或行业术语,杜绝用冷门词汇

  1. 缩写的使用必须参考缩写规范表,不在缩写规范表里的不许用
  2. Method名字需要是doSomething
  3. Class名字需要是NamePhrase(首字母大写)
  4. 数据类型不需要加前缀、匈牙利命名法

3、 基本数据类型命名规范

Integer:int+描述 Char:chr+描述 Boolean:bln+描述

Long:lng+描述 Short:shr +描述 Double:dbl+描述

String:str+描述 Float:flt+描述 Single:sng+描述

DataTime:dt+描述 Array:arr+描述 Object:obj+描述

如:String srtName;

4、 Java代码根据资源类型命名

  1. Activity命名:xxxxActivity
  2. Fragment命名:xxxxFragment
  3. View命名:xxxxView 或者 xxxxLayout
  4. Dialog命名:xxxxDialog
  5. Service命名:xxxxService
  6. BroadcastReceiver命名:xxxxReceiver

5、资源文件命名

  1. Layout文件命名:
    Activity的Content View应使用:activity_xxxx.xml 的形式
    自定义View应使用:view_xxxx.xml
    adapter的列表项目使用:item_xxxx.xml
    dialog的布局使用dialog_xxxx.xml
    PopupWindow命名:ppw_xxxx.xml

  2. drawable文件
    文件名全部小写,写明按钮的具体作用和状态,单词之间使用下划线连接。
    login_normal.png
    login_pressed.png
    login_focused.png
    xxxx_checked.png
    xxxx_focused.png
    xxxx_selected.png
    xxxx_pressed.png
    xxxx_disabled.png
    xxxx_normal.png

多状态drawable文件命名xxxx_bg.xml

al_discovery_bg.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/icon_discovery_checked" android:state_checked="true"/>    <item android:drawable="@drawable/icon_discovery_checked" android:state_pressed="true"/>    <item android:drawable="@drawable/icon_discovery_normal" android:state_checked="false"/></selector>
  1. layout中的id命名
    命名模式为:view的逻辑名称_view缩写
    username_tv(展示用户名的TextView)

2 工具使用规范

Android Studio 工具设置,主要是代码格式化设置:
file——》settings——》keymap在keymap中选择eclipse,选择了copy一下,保留原来的eclipse的快捷键版本,然后新增加了一个eclipse copy的快捷键版本。在搜索框里搜索formatcode,确保快捷键是Ctrl+shift+F,这样就和eclipse一样的format方式。

自动化工具检查代码规范
项目中配置checkstyle、PMD、findbugs,利用这几个工具进行代码规范检查,进而提到代码质量。

3 提高代码质量

(1)删除无用的变量

(2)删除无用的引入

(3)对于可以复用的部分,一定提取成共用的方法,减少代码量

(4)变量/方法命名一定要符合清晰易懂,不用太在乎长度

(5)代码完成后,进行code review,减少出错几率

(6) 用适合的方式尽量去思考设计模式方式来进行开发

(7)代码书写注意事项

  1. item框整个item点击范围
  2. 文字长度限制,太长会导致的换行压住别的控件的问题
  3. 弹出框生命周期
  4. 空指针判定
  5. list的 item都没有了的空白页提示
  6. list里面进行删除操作的时候,不能直接remove,否则会导致java.util.ConcurrentModificationException
  7. 按钮多次点击处理方式
  8. json 请求响应对象,用基本对象类型,不用基本数据类型,比如用Integer,不用int 。这样数据就没有默认值,就是空。
  9. 使用RxJava 注意要订阅和取消订阅;
原创粉丝点击