Android开发规范V1.0
一、命名规范:
1、简介:总体命名都为英文字母拼接而成,对于常见的大家习以为常的单词可以采用 缩写形式,如常见的URL,BUF等,较长的单词可以取全面几个字母形成缩写。
驼峰命名法:第一个单词的首字母小写,其余单词的首字母大写。
大驼峰命名法:每个单词的首字母都大写。
下划线命名法:每个单词用下划线间隔开。
2、具体命名:
1)包名:采用四级包名形式。
第一级代表单位性质,如com代表公司,edu代表教育机构,个人的话就随意了。
第二级代表公司或者教育机构的缩写,如Tencent。
第三级为项目的名称,如扣扣项目的QQ。
第四级为具体的功能分包,如base代表基础包,widgets代表组件包,utils代表工具包等等。
其余级别可以自行进行延伸,如可以自己根据功能模块去分包,之后再每个模块内部再进行相应的分包即可,如XX模块下分bean包、activitys包、adapter包等,也可根据设计模式进行分包等,如XX模块下的View包,Presenter包等。
2)类名:采用大驼峰命名法。
^1、普通类名:直接采用大驼峰命名法即可。
^2、Activity命名:采用大驼峰命名法,同时类名的最后一般以Activity结尾,如BaseActivity等。
^3、Service命名:同Activity一致,如LocationService等。
^4、BroadCastReceiver命名:同Activity一致,如LoactionChangedBroadCastReceiver,也可缩写为LoactionChangedReceiver等。
^5、ContentProvider命名:同Activity一致,如ContactContentProvider,也可缩写为ContactProvider等。
^6、自定义View的命名:采用大驼峰命名法,一般以父类的名字结尾,如CircleImageView等。
^7、数据库类命名:一般以DBHelper结尾,如NewsDBHelper等。
^8、Adapter类命名:一般以Adapter结尾,如GoodsAdapter等。
^9、公共类命名:一般以Util或者Manager等结尾,如BitmapUtil,HttpManager等。
^10、基础类命名:一般以Base开头,如BaseActivity,BaseFragment等。
3)接口名:采用大驼峰命名法,一般以I开头,或者为OnXXXListener,前者一般 实现某一部分功能,如IXXXPresenter去表示XXXPresenter要实现的方法;后者一 般在监听回调中用到,如OnClickListener,OnChangedListener;
4)属性名、变量名:采用小驼峰命名法。
^1、成员属性(变量):一般以m开头,如果是View的声明,一般组成为m+View简写+功能,如登陆按钮为mBtnLogin等;如果是一般属性则为m+属性名(+功能),如mDialogLogin,mInfo等。
^2、局部变量:采用小驼峰命名法,一般能说明变量的用途即可,如index表示下标等。
5)方法名:采用小驼峰命名法。
-->采用动词加名词命名,说明方法的具体功能,常有的操作一般如下:
-->表初始化的一般用initXX()命名。
-->表判断的一般用isXX()命名。
-->表获取、设置、重置的一般用getXX(),setXX(),resetXX()命名。
-->表数据处理一般用到processXX()命名。
-->表弹出、提示、显示的一般用displayXX(),showXX()命名。
-->表保存信息、数据的一般用saveXX()命名。
-->表清除、移除、添加的一般用clearXX(),removeXX(),addXX()命名。
6)常量的命名:采用下划线命名法。
-->常量命名一般全部大写,每个单词之间用下划线隔开,如LOGIN_URL等。
7)资源文件的命名:
^1、layout资源:对应activity的一般为activity_xxx,对应fragment的一般为fragment_xxx,对应view的一般为view_xxx,对应adapter一般为item_xxx,其他的对应局部的一般为item_xxx。
^2、drawable资源:选择器一般命名为xxx_selector,形状一般以xxx_circle,xxx_rect命名表示圆形或矩形。
^3、图片资源:一般为形态_功能,如btn_login等。
^4、字符串资源、颜色:能说明用途即可,如padding_10等。
^5、layout中id:一般为控件缩写_功能,如登陆按钮为btn_login等。
^6、动画资源:一般为功能_方向,如fade_in表示淡入等。
二、排版规范:
1、简介:排版直接展示了代码的样式,规范、清晰的排版能够助人更加快速/准确地理 解代码,常见的排版方式如代码缩进、空行分隔等。
2、具体排版:
^1、代码缩进:代码块要进行代码的缩进,一般缩进为Tab,即4个空格,没有代 码缩进会使得代码是去层次感。
-->一般if、switch、for、while等代码块都要采用此缩进方式。
^2、一句一行:一般不要把多个短句放在一行,会使得代码看起来比较混乱。
^3、太长的语句进行分割:如果一个逻辑语句过长,则进行适当的分割,如 XX&&XX&&XX&&XX则可以分割如下:
XX
&&XX
&&XX
&&XX
^4、大括号的使用:一般在if,switch等语句中如果执行代码只有一行可以省略大 括号,这里不要省略,养成良好的编码习惯,维护起来更加方便,也不容易出错。
^5、字段、方法的排序:一般遵循从public-->private的顺序纵向排序。
^6、空行分隔:一般把一个代码块中不属于同一类型的操作用空行分隔开来,增加 代码的可读性与可维护性。
三、注释规范:
1、简介:不规范、甚至缺失的注释虽然不会影响代码的编译与执行,但是对于后期代 码的维护与重构却造成了很大的麻烦,需要我们去话费大量的精力与时间去理解与维护,
因此规范的注释在编码中是非常必要的,一般源程序的代码注释量要达到代码总量的 20%~30%。
-->重要的类、函数的作用及原理、重要的字段都是需要添加注释的。
-->修改之后注释也要及时修改,保证注释与代码的一致性。
-->注释分为单行注释、多行注释以及文档注释。
2、具体注释:
^1、类、接口注释(文档注释/** */):
-->位置:public等修饰符之前,import关键字之后。
-->内容:功能简述、@auther 创建者、@see 相关的类、方法(可选)、@since 产 品、模块版本、@deprecated 不建议使用(可选)。
^2、重要的成员变量、方法注释(文档注释/** */):
-->位置:需要注释的成员变量或者方法的上面
-->内容:成员变量注释说明成员变量的用途即可。
方法的注释,包含功能简述、@param参数说明(可选)、@return返回值说明(可 选)、@exception/@throws 抛出异常说明(可选)、@see 关注的类/方法/成员变量、 @since起始版本、@deprecated 不建议使用(可选)
^3、重要操作的注释(单行注释// 或多行注释/* */):
-->位置:操作的位置
-->内容:说明重要操作的内容,会产生的影响以及需要注意的事项。
^4、异常的注释:
-->位置:自定义异常的类(文档注释),抛出异常的位置(单行注释或者多行注释)。
-->内容:自定义异常注释类似于类和接口的注释,但需要说明异常抛出的情形以 及抛出异常说明的问题/异常处理;抛出异常的位置要说明异常抛出的具体原因以 及发生异常应该如何处理,可能的异常原因等。
四、其他规范:
1、方法的抽离,方法尽量一个方法做一件事情,不要把太多不相干的操作放在同一个 方法中,一方面不利于理解,也不利于代码的维护与复用。
2、上行原则,对于一些类的公共属性与方法,我们可以抽象一个父类,在父类中进行 属性与方法的申明与操作,明确代码的层次性同时增加代码的复用率。
3、下行原则,对于一些类的属性与方法具有特别明显的个体特征,我们则没有必要放 在父类中,尽量新建相应的子类放在其中进行操作,这样突出了明显的个体特征,也避 免了其他类继承该类时继承一些没有必要的属性与方法,比较臃肿与复杂,增加维护的 难度。
4、string、color资源分辨放在相应的目录下,不要在java代码中直接写字符串。
5、一般常规、通用的方法直接封装成工具类来使用(手机基本信息获取、屏幕尺寸 获取、图片加工、字符串匹配等)。
6、弹出框、提示Toast(SnackBar)等常用组件封装起来统一管理,特殊需求特殊定制 即可。
7、尽量使用google官方组件实现功能,如下拉刷新、侧滑菜单等在v7、design等包中 都已经存在。
8、日志信息统一管理,可引入第三方日志框架,如logger,也可以自己封装管理,实 现可自由开关日志输出等操作。
五、UI优化建议:
1、layout组件化,架构层次清晰;
-->include标签实现复用。
-->merge标签减少嵌套层级。
2、对于重复出现的部分,使用style,对样式进行复用。
3、复杂的布局尽量采用相对布局,避免嵌套层级过多。
4、实现自适应,使用dp,sp为单位,不适用px为单位,同时可以使用权重进行局部 的平分。
六、性能优化建议:
1、ListView/GridView性能优化,ViewHolder实现代码控件复用
,也可使用recycleview代替来实现。
2、异步任务:
网络请求,数据库操作,文件操作等耗时操作,放在子线程进行操作。
3、Bitmap处理:
对Bitmap进行及时的回收处理操作。
4、大图片可使用.9.png进行拉伸来实现。
5、字符串拼接频繁的时候不要频繁使用“+”来实现,可使用StringBuffer和StringBuilder 来实现。
6、监听器要及时销毁。
7、查询操作等的Cursor需要及时关闭与销毁。