Android 编码规范V1.0
来源:互联网 发布:结构的刚度矩阵 编辑:程序博客网 时间:2024/05/29 10:06
1 代码规范
1.1排版规范
1、源文件编码
- 所有源文件编码均为UTF-8
- 缩进为4个space,(不使用tab)
- 每行不超过200个字符,超过需要折行
2、空格、空行
- 左右的变量,操作符,参数之间必须加入空格
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、大括号
列表内容
起始大括号不要单独占一行,结束的大括号独立成行
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、基础命名规范
- 包名
包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名。
例如:com.cmcc.hemuyi.discovery
注意:
如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下。
class/interface/enum的命名使用PascalCase
AssetManager
Screen
ScreenTypemethod的命名使用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";
- enum中各字段的命名为PascalCase,且每个字段独立成行
public enum Element { Earth, Hero, WaterFire}
- 命名必须是自解释的、有意义的,不要用i、j、k等名字命名
2 、命名必须使用合理、常用的英文单词,或行业术语,杜绝用冷门词汇
- 缩写的使用必须参考缩写规范表,不在缩写规范表里的不许用
- Method名字需要是doSomething
- Class名字需要是NamePhrase(首字母大写)
- 数据类型不需要加前缀、匈牙利命名法
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代码根据资源类型命名
- Activity命名:xxxxActivity
- Fragment命名:xxxxFragment
- View命名:xxxxView 或者 xxxxLayout
- Dialog命名:xxxxDialog
- Service命名:xxxxService
- BroadcastReceiver命名:xxxxReceiver
5、资源文件命名
Layout文件命名:
Activity的Content View应使用:activity_xxxx.xml 的形式
自定义View应使用:view_xxxx.xml
adapter的列表项目使用:item_xxxx.xml
dialog的布局使用dialog_xxxx.xml
PopupWindow命名:ppw_xxxx.xmldrawable文件
文件名全部小写,写明按钮的具体作用和状态,单词之间使用下划线连接。
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>
- 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)代码书写注意事项
- item框整个item点击范围
- 文字长度限制,太长会导致的换行压住别的控件的问题
- 弹出框生命周期
- 空指针判定
- list的 item都没有了的空白页提示
- list里面进行删除操作的时候,不能直接remove,否则会导致java.util.ConcurrentModificationException
- 按钮多次点击处理方式
- json 请求响应对象,用基本对象类型,不用基本数据类型,比如用Integer,不用int 。这样数据就没有默认值,就是空。
- 使用RxJava 注意要订阅和取消订阅;
- Android 编码规范V1.0
- Nutz Java 编码规范 (V1.0)
- Android编程规范V1.0
- 开发规范V1.0
- 【Android开发经验】Android编程规范V1.0
- android 编码规范,命名规范
- 前端代码规范V1.0
- android编码规范
- Java/Android编码规范
- Android编码规范
- Android 编码规范
- Android编码规范
- Android编程编码规范
- Android 开发编码规范
- Android编码规范
- Android编码规范
- Android编码规范
- Android开发编码规范
- 输出最小整数对,以第一个数为主键
- 线性表的链式表示和实现(单链表)
- ssh只允许自己定义的主机访问
- zabbix_proxy.log
- Android Kotlin 匿名内部类自动补全
- Android 编码规范V1.0
- 时间轴
- json_decode的结果为null,json_encode的结果为
- hdu 5920 贪心+模拟
- vmware workstation 4,5,6,7,8,9,10,11,12,14 通用许可证密钥集合
- 使用synchronized产生死锁
- Android Studio 一个工程打包多个不同包名的APK
- cocos2dx3.0rc导出自定义类到lua的方法详细步骤
- LeetCode.415(43) Add Strings&&Multiply Strings