作者:CameloeAnthony
原文链接:http://www.jianshu.com/p/99239b9c1630
相关阅读:
吊炸天!74款APP完整源码!
[干货]2017已来,最全面试总结——这些Android面试题你一定需要
Android常用开源框架的源码解读套路--教你怎么读开源框架源码
前言
在开发中,一个良好的开发习惯以及一个开发规范可能会让你少走很多弯路,也会一定程度上的提高代码的可读性,可维护性和可拓展性。当随着需求的不断变更,需要维护项目的时候。当随着项目的代码量的提升,需要重构的时候。你会明白一个好的开发规范多么多么的重要。
这里整理一下自己android开发中的一些规范。希望对各位有帮助。
命名规范
包命名规范
代码命名规范
命名规则有很多高大上的名词,比如大驼峰,小驼峰,匈牙利命名法。其实最简单的就是按照谷歌命名学习。
-
常量、枚举等均采用大写形式,用下划线区分各单词。使用static final
例如:
private static final String TAG_FOR_ACTIVITY = "XXXX";
-
类名、接口名、枚举名。第一个和后面的单词都要第一个字母大写
例如:
MainActivity
,
PersonalLoginActivity
-
资源文件命名
例如:
activity_main.xml
,
ic_launcher.png
注意图片文件命名只能用小写字母、数字,否则会导致R文件无法编译出来。也是比较费心的。
-
继承自安卓组件的类,一般采用父类名作为后缀,
例如:
class LoginActivity extends Activity{}
-
自定义异常必须以
Exception
结尾
-
全局变量添加所有者前缀:实例成员变量前缀m(表示member),类静态变量前缀s(表示static),
例如:
protected Subscription mSubscription;
-
控件变量添加组件前缀,顺序在所有者前缀之后,控件缩写button->btn,textview ->txw,listview->lst等
例如:全局名称
mBtnNext
局部名称
btnNext
-
构造方法采用递增方式(参数多的写在后面),参数少的调用参数多的构造函数。这样也减少初始化代码。比如开源库
PagerSlidingTabStrip
更多命名规范
之前收藏的这篇文章比较全。
Android 命名规范 (提高代码可以读性)
编程规范
-
源文件编码格式为 UTF-8。
-
java代码中不出现中文,最多注释中可以出现中文
-
服务端可以实现的,就不要放在客户端
-
引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大
-
处理应用全局异常和错误,将错误以邮件的形式发送给服务端
-
图片的.9处理
-
使用静态变量方式实现界面间共享要慎重
-
单元测试(逻辑测试、界面测试)
-
不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突
-
activity中在一个View.OnClickListener中处理所有的逻辑
-
strings.xml中使用%1$s实现字符串的通配
-
数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断
-
对于未完成的方法,使用TODO加以标记
-
若功能已完成,但存在效率等潜在问题时,使用XXX加以标记
-
若代码存在严重问题或仅用于调试,使用FIXME加以标记
-
values目录下文件名称较固定,不得随意更改
代码提交规范
我们使用的无论是git,还是svn都需要遵守下面这些规范,个人比较倾向于git。
-
工作目录要及时更新,不要和服务器有太大的差别
-
提交代码时,如果出现
冲突
,必须仔细分析解决,不可以强行提交
-
提交代码之前先在本地进行测试,确保项目能编译通过,且能够正常运行,不可盲目提交
-
必须保证服务器上的版本是正确的,项目有错误时,不要进行提交
-
提交之前先更新
-
提交时注意不要提交本地自动生成的文件,比如我们Android Studio项目中的
idea
,
build
文件夹是不需要提交的。
-
不要提交自己不明白的代码
-
提前协调好项目组成员的工作计划,减少冲突
-
对提交的信息采用明晰的标注(写注释)
使用git以及github,相信stormzhang的
从0开始学习 GitHub 系列
会对你有很大的帮助。
架构规范
这是我整个系列文章
从零开始搭建android框架系列
的重点,所以这里放在最后面。
架构方式
是选择MVP,MVC,MVVM ,Flux还是clean 架构?
,+dagger2?+rxjava?+Retrofit/okhtttp?+loader?+databinding?+contentProvider?
谷歌官方架构示例
android-architecture
,以及我之前github中整理的架构合集能给你答案。
开源库的选取以及封装。