Android开发有哪些规范?

  1. 编码方式

统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了。

  1. 缩进
    统一为4个空格,将Tab size设置为4则可以保证tab键按4个空格缩进。另外,不要勾选上Use tab character,可以保证切换到不同tab长度的环境时还能继续保持统一的4个空格的缩进样式。

  2. 花括号

public void method()
{
// Bad
}
public void method() {
// Good
}

  1. 空格的使用

if、else、for、switch、while等逻辑关键字与后面的语句留一个空格隔开。

// Good
if (booleanVariable) {
// TODO while booleanVariable is true
} else {
// TODO else
}
// Bad
if(booleanVariable) {
// TODO while booleanVariable is true
}else {
// TODO else

运算符两边各用一个空格隔开。

int result = a + b; //Good, = 和 + 两边各用一个空格隔开
int result=a+b; //Bad,=和+两边没用空格隔开

方法的每个参数之间用一个空格隔开。

public void method(String param1, String param2); // Good,param1后面的逗号与String之间隔了一个空格
method(param1, param2); // Good,方法调用时,param1后面的逗号与param2之间隔了一个空格
method(param1,param2); // Bad,没有用一个空格隔开

  1. 空行的使用

将逻辑相关的代码段用空行隔开,以提高可读性。空行也只空一行,不要空多行。在以下情况需用一个空行:

  • 两个方法之间
  • 方法内的两个逻辑段之间
  • 方法内的局部变量和方法的第一条逻辑语句之间
  • 常量和变量之间
  1. 长行

当一个表达式无法容纳在一行内时,可换行显示,另起的新行用8个空格缩进。

someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);

  1. 一行声明一个变量
    一行声明一个变量,不要一行声明多个变量,这样有利于写注释。

private String param1; // 参数1
private String param2; // 参数2

  1. 行宽设置为100,设置格式化时自动断行到行宽位置。

  2. 使用快捷键进行代码自动格式化。

Windows:CTRL+ALT+L
Mac:OPTION+COMMAND+L

  1. 一个方法最多不要超过40行代码。

  2. 引用第三方库要慎重

避免应用大容量的第三方库,导致客户端包非常大。

  1. 文字大小的单位

统一用sp,元素大小的单位统一用dp。

  1. 应用中的字符串

统一在strings.xml中定义,然后在代码和布局文件中引用。

  1. 颜色值

统一在colors.xml中定义,然后在代码和布局文件中引用。另外,不要在代码和布局文件中引用系统的颜色,除了透明。

  1. JSON解析

Android中调用服务器端的接口一般返回的是JSON数据,在解析JSON的时候,无论是使用原始的手工解析方式,还是使用javabean的解析方式,解析出来的结果在使用的时候必须都进行判空处理。不允许因为服务端的json出问题,导致app在解析json的时候出现崩溃。

  1. Int类型常量

函数返回的时候,如果返回的int类型的数据并不是真实的实用的数据值(例如表示宽度、高度、大小等值),仅仅代表函数执行成功、失败、异常的状态值,并且这些值是有限的几个值,必须要将这些值使用静态常量描述,或者使用枚举类型,例如:

int GetJsonString()

该函数返回-1表示获取解析JSON数据异常,返回0表示成功,返回1表示网络连接异常,返回2表示JSON内容中的数据部分为空。那么在函数内部的代码里不要直接使用这些字面值,这些字面值对于程序员来说是毫无意义的,代码可阅读性很差,建议做成下面的模式:

public static final int RESULT_PARSE_JSON_EXCEPTION = -1;
public static final int RESULT_SUCCESS = 0;
public static final int RESULT_NETWORK_EXCEPTION = 1;
public static final int RESULT_NO_DATA = 2;

使用这些符号常量值代替字面值的好处是,符号常量值是由大写的英文单词组成,是有意义的,可以帮助程序员更好的理解函数返回值的意义,而且符号常量值对应的具体的赋值在后期也是很方便修改的

  1. 封装 Log 功能

Log功能应该封装成为自动将当前所在类的类名变成log输出的TAG参数,发布的app最好是能循环写日志文件到系统存储中,并且日志文件应该使用反复覆盖的方式重复利用。下面仅仅是一个不完善的例子:

public class MyLog {
public static final String TAG = "myapp ";
public static void v(Object o, String message) {
Log.v(TAG + o.getClass().getSimpleName(), message);
}
}

使用方法:

Log.v(TAG + o.getClass().getSimpleName(), message);

打印结果

V/myapp MainActivity: Hello

  1. Activity点击事件
    activity中在一个View.OnClickListener中处理所有的逻辑。

  2. 数据一定要效验
    例如字符型转数字型,如果转换失败一定要有缺省值;
    服务端响应数据是否有效判断;

猜你喜欢

转载自blog.51cto.com/13807306/2132085