您的位置:首页 > 移动开发 > Android开发

Android编码规范

2016-03-07 16:43 232 查看
1 通用原则

2 通用格式

3 必须遵守

4 建议遵守

5 命名规范

6 代码示例

1 通用原则

“必须遵守” 为必须遵守的原则, 必须严格按照规范实行. “建议遵守” 为不强制要求的规范, 可以依照规范要求, 提高代码可读性.

2 通用格式

(1) 文件编码格式为 UTF-8.

(2) 文件换行为 Unix 格式( ‘\n’ ).

(3) 同方法内, 以空行区分不同的逻辑块.

(4) 命名中只能用英文单词, 不可出现拼音.

3 必须遵守

(1) 一个方法不要超过2屏(约80 ~ 100行), 超过时考虑按逻辑封装为更小的方法.

(2) 代码中(包括源码文件和布局文件)除注释外, 不可出现中文. 需要中文时提取为资源文件再进行引用. 原则上中文只应出现在 string.xml 中.

(3) 每个类和功能性 public 的方法需要注释, 参考 javadoc 的写法. private 方法若复用性较高也须注释.

(4) 修改代码时, 也须修改相应文档.

(5) 每个 java 文件只含一个类. 如果只在当前类中引用的接口( Interface ), 可以放在同一个 java 文件中, 其余情况下,接口均应放到独立的 java 文件中.

定义局部变量时, 必须初始化.

(6) 全局变量在类中声明并初始化时, 只可赋值为 null 或空值, 不可直接 new 对象进行赋值.

(7) 对于 if, while, for 等逻辑块, 总是使用花括号括起每一个分支. 即使分支中只有一行 return 也须用花括号括起.

(8) switch 结构中, 如果需要 fall through 时, 需要在相应的 case 中做注释.

提交代码时勾选 Before Commit 中的 Reformat code, Rearrange code, Optimize imports 三个选项.

4 建议遵守

(1) 1行最多有100个字符(除了 import 和注释), 多于100个时进行拆分.

(2) if 不要超过3层, 有多个(>=3) if 并列时改为 switch 结构.

(3) 文档中的英文与中文间加空格以区分.

(4) 当子类重载父类的方法时, 加 @Override 标签.

(5) 变量的作用域尽量短.

例如, 局部变量 d 仅在 if 分支中使用到, else 分支中没有使用到时, 采用以下的声明方式.


if (…) {

double d = someCalculation(…);

doSomethingWith(d);

} else {

// No use of d

}

(6) TODO 的使用

1)自动生成的 TODO, 在模块功能完成后应删除掉.

2)可以在以下几种情况标记 TODO, 并加上相应说明

.暂时性的解决方案

.可用但需要优化的部分

.小范围可用, 但大范围使用时会有性能问题

.未实现的逻辑

// TODO: Switch to a Map when you have more entries

// TODO: Remove after UrlTable2 has been checked in

(7) 变量声明时, 每行仅声明一个变量. 相同类型的变量, 声明时放在一起, 不同类型间以空行隔开.

private ImageView backbutton;

private ImageView flashbutton;

private boolean hasFlash = false;

private boolean isCheater = false;

private boolean hasScannedOnce = false;

private int previewTime = 0;

private int decodeTime = 0;

(8) 表示状态的变量, 如 tab 页的位置, type 的值等, 如果有复用时(调用次数>=2), 将其内容定义为名称有意义的常量或枚举类型.

(9) 单例化的类, 关联的 Context 应注意其生命周期, 以防出现 Context 被意外销毁, 导致 Context 为 null 的情况. 一般可以将 Context 设为 AppContext.

private PsPushUserDao() {

this.mContext = KituriApplication.getApplication();

}

protected static PsPushUserDao getInstance() {

if (mAppStoreSetting == null) {

mAppStoreSetting = new PsPushUserDao();

}

return mAppStoreSetting;

}

5 命名规范

(1) 大小写规范.

1)类以大写字母为开头.

public class SomeClass {



}

2)常量全为大写字母, 单词间以下划线进行分隔.

public static final double GOLDEN_RATIO = (1 + Math.sqrt(5.0))/2;

3)其余均为首字母小写, 每个单词首字母大写.

局部变量

全局变量

方法的参数

4)使用缩略词时, 将其当作一个单词. 如 getUrl, 而非 getURL.

(2) 名称规范

1)静态变量, 开头为 s

private static double sBiggestRadius;

2)非静态的私有变量, protected 的变量, 开头为 m

private String mFirstName;

3)ListView 等控件, 填充成员的类命名, 必须以 Item 开头

public class ItemAtUser extends RelativeLayout {



}

6 代码示例

(1) public 方法注释

/**

* Send failure message: Server return error.

*

*

* @param context Activity

* @param time From decoding complete to now

* @param state Server return state

*/

public static void sendFailureMessage(Context context, int time, ResponseState state) {

(2) public 变量注释

/**

* The book to search, identified by ISBN number.

*/

public static final String ISBN = “ISBN”;

(3) switch 的 fall through 注释

switch (condition) {

case ABC:

statements;

/* falls through */

case DEF:

statements;

break;

case XYZ:

statements;

break;

default:

statements;

break;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: