Android端代码规范
有好的建议可以提、集思广益,逐渐补充完善项目的代码规范
代码注意事项
- 代码必须格式化、去除无效引用
- dialog 统一使用半透明activity()
- 通用common抽象,只能放公共类,不要放业务相关
- 相关联的逻辑应该在一起,不相关联的逻辑不应该混在一起
- 严禁使用new handler()、new Thread(),可以项目使用项目里的ThreadUtils
- 第三方代码必须二次封装后再使用
- recycleView有各种写法,统一(BaseRecyclerViewAdapterHelper就挺好的)
- eventbus一定不要重复,分场景定义
- 避免重复添加fragment导致的崩溃,建议调用FragmentTransaction.add方法,先判断fragment.isAdded()
- 如果使用Java语言,在所有使用 Object的地方,必须进行判空,除非你能非常确定对象不会为空,推荐使用项目里的ObjectUtils.isNotEmpty()
- kotlin严禁使用避免使用 !!
- 使用图片加载时用ImageLoadingUtil,不要直接使用glide
- Bundle不要传递过大参数。控制在500K以内,过大的时候可以选中存储为文件,然后传递文件路径在解析
- 写工具类先看工具类有没有,不要重复添加
- 全局获取:ContextManager.getApplication()
1 |
|
- 待补充…
分包
按功能分包
好处:
- 高内聚、低耦合,哪块要添新功能,只改某一个 package 下的东西
- 很容易删除功能
- package 的大小有意义了,包里 class 太多,表示这块需要重构(划分子包)
命名
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
类名:大写驼峰
模块名 + 功能(Activity、Fragment、Adapter)
方法名:小写驼峰
方法名通常是动词或动词短语。
方法 | 说明 |
---|---|
initXX() |
初始化相关方法,使用 init 为前缀标识,如初始化布局 initView() |
isXX() , checkXX() |
方法返回值为 boolean 型的请使用 is/check 为前缀标识 |
getXX() |
返回某个值的方法,使用 get 为前缀标识 |
setXX() |
设置某个属性值 |
handleXX() , processXX() |
对数据进行处理的方法 |
displayXX() , showXX() |
弹出提示框和提示信息,使用 display/show 为前缀标识 |
updateXX() |
更新数据 |
saveXX() , insertXX() |
保存或插入数据 |
resetXX() |
重置数据 |
clearXX() |
清除数据 |
removeXX() , deleteXX() |
移除数据或者视图等,如 removeView() |
drawXX() |
绘制数据或效果相关的,使用 draw 前缀标识 |
变量名:小写驼峰
静态变量、常量:大写下划线 A_B
其他命名
命名要明白,见名知其意,例如:
工具类:util
管理类:Manager
资源
图片(drawable/ 和drawable-xxhdpi/)
命名规则:类型{_模块名}_逻辑名称
、类型{_模块名}_颜色
。{}
中的内容为可选
位置:公用的放在common,自己的模块用到的放自己模块
名称 | 说明 |
---|---|
btn_main_about.png |
主页关于按键 类型_模块名_逻辑名称 |
btn_back.png |
返回按键 类型_逻辑名称 |
divider_maket_white.png |
商城白色分割线 类型_模块名_颜色 |
ic_edit.png |
编辑图标 类型_逻辑名称 |
bg_main.png |
主页背景 类型_逻辑名称 |
btn_red.png |
红色按键 类型_颜色 |
选择器
sel_btn_xx |
作用在 btn_xx 上的 selector |
---|---|
btn_xx_normal |
默认状态效果 |
btn_xx_pressed |
state_pressed 点击效果 |
btn_xx_focused |
state_focused 聚焦效果 |
btn_xx_disabled |
state_enabled 不可用效果 |
btn_xx_checked |
state_checked 选中效果 |
btn_xx_selected |
state_selected 选中效果 |
btn_xx_hovered |
state_hovered 悬停效果 |
btn_xx_checkable |
state_checkable 可选效果 |
布局资源文件(layout/)
命名规则:类型_模块名_功能(可选)
activity | activity_模块名 | 例如 R.layout.activity_login |
---|---|---|
fragment | fragment_模块名 | 例如 R.layout.fragment_login |
include | layout_模块名_功能名 | 例如 R.layout.layout_login_bottom |
adapter | item_模块名_功能名 | 例如 R.layout.item_simple_text |
dialog | dialog_模块_功能名 | 例如 R.layout.dialog_time_picker |
widget | widget_模块_功能 | 例如 R.layout.widget_app_clock |
布局资源 id 命名
id 命名直接采用小写驼峰样式,因为使用viewBinding直接就可以就可以获取ID,不需要再重新转一下了
控件Id命名:控件缩写_(模块名)_功能名
TextView | EditText | ImageView | Button | ListView | CheckBox | LinearLayout | RelativeLayout | FrameLayout |
---|---|---|---|---|---|---|---|---|
tvShopName | et | iv | btn | lv | cb | ll | rl | fl |
strings.xml
<string>
的 name
命名使用下划线命名法,采用以下规则:{模块名(moudle)_}逻辑名称
,这样方便同一个界面的所有 string
都放到一起,方便查找。
名称 | 说明 |
---|---|
main_menu_about |
主菜单按键文字 |
friend_title |
好友模块标题栏 |
friend_dialog_del |
好友删除提示 |
login_check_email |
登录验证 |
dialog_title |
弹出框标题 |
注释规范
类注释
每个类完成后应该有作者姓名和描述的注释,对自己的代码负责,也好找人。
具体可以在 AS 中自己配制,进入 Settings -> Editor -> File and Code Templates -> Includes -> File Header,输入
1 |
|
方法注释
不强制,因为有些方法一看就知道是干啥的,在方法前一行输入 /** + 回车
,AS 便会帮你生成模板,我们只需要补全参数即可
变量注释
//
提测的代码todo
建议,不强制,不要无效的todo
代码样式规范
编写简短方法
在可行的情况下,尽量编写短小精炼的方法。有些情况下较长的方法是恰当的,因此对方法的代码长度没有做出硬性限制。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。
类成员的顺序
推荐使用如下排序:
- 常量(Kotlin 伴生对象放在开头)
- 字段
- 构造函数
- 重写函数和回调
- 方法
如果类继承于 Android 组件(例如 Activity
或 Fragment
),那么把重写函数按照他们的生命周期进行排序是一个非常好的习惯,例如,Activity
实现了 onCreate()
、onDestroy()
、onPause()
、onResume()
,它的正确排序如下所示:
1 |
|
函数参数的排序
在 Android 开发过程中,Context
在函数参数中是再常见不过的了,我们最好把 Context
作为其第一个参数。
正相反,我们把回调接口应该作为其最后一个参数。
1 |
|