| 
                        副标题[/!--empirenews.page--]
                         前言 
一份合格的代码不应只满足于实现功能, 更应该遵循良好的规范. 遵循良好的代码规范有利于: 
    - 提升程序稳定性, 减少代码隐患, 降低故障率;
 
    - 增强可扩展性, 大幅提高维护效率;
 
    - 统一标准, 提升多人协作效率;
 
    - 方便新人快速上手, 在项目组人员发生变动时保证项目进度。
 
 
这里梳理一下Android开发过程中需要注意的一些地方, 包括多个部分, 另外根据约束力强弱分为两类: 
    - 强制: 如果不遵守会导致代码严重混乱, 后期维护复杂, 甚至会出现严重bug;
 
    - 推荐: 如果不遵守可能会导致代码描述不清, 理解困难, 导致功能越多维护越难的问题。
 
 
  
下面是规范正文 
系统设计 
强制: 
    - 不允许出现两段相同的逻辑块, 必须抽出为公共方法, 差异性使用参数控制, 避免修改时多处修改导致遗漏;
 
    - 不允许出现两段相同的处于同一逻辑组的复杂布局, 必须抽为单独的include/merge;
 
    - 不允许父类中出现子类具体方法, 如果需要的话可以父类定义抽象方法, 交由子类实现;
 
    - 不允许Activity内多Fragment之间的直接沟通, 必须通过Activity中转。
 
 
推荐: 
    - 推荐使用MVP或者MVVM架构;
 
    - 推荐使用Kotlin语言;
 
    - 采用模块分类方式替代文件类别方式, 方便快速查找模块相关内容, 例:  LoginActivity/LoginPreenter/LoginHttpRequest/LoginBean/LoginAdapter等所属同一登录模块的文件放入一个文件夹,  而不是所有activity放入一个文件夹, 所有adapter放入一个文件夹。
 
 
命名方式 
强制: 
    - 不允许出现中文命名方式;
 
    - java/kotlin文件使用大驼峰方式, 例: LoginActivity.kt, NewsAdapter.kt, NewsBean.java;
 
    - layout/drawable/anim/style等resource文件使用小写+下划线的方式, 例: login_activity.xml,  login_logo.png;
 
    - 类定义使用大驼峰方式, 例: class LoginPresenter {}, class NewsBean {};
 
    - 对象使用小驼峰方式, 例: LoginPresenter loginPresenter, NewsBean newsBean;
 
    - 静态常量使用全大写+下划线的方式, 例: public static final boolean IS_RELESAE = true;
 
    - Kotlin使用的布局中的控件id必须使用小驼峰方式, 例: android:id="@+id/tvLogin"。
 
 
推荐: 
    - 文件/资源命名时采用 模块+类型 的方式, 以便迅速查找相关内容, 例如登录页面: LoginActivity.kt,  login_activity.xml, login_logo.png, 网络错误, #f3f3f3
 
    - java使用的布局中的id名建议使用小驼峰方式, 并且使用控件类型缩写开头, 例: android:id="@+id/tvLogin",  附录常用控件缩写:
 
 
  
可见性 
强制: 
    - 所有新定义的类/方法, 默认写成private, 只有在其他类需要引用时再看情况标为public, protected,  package-private;
 
 
推荐: 
    - java定义的父类中定义的方法如果子类重写会导致问题时, 添加final关键字;
 
 
注释相关 
类/复杂或者不能从方法名字看出意图的方法必须添加注释, 当类/方法添加注释时, 必须使用此类型注释: 
- /** 
 - * Created by XXX on 2019/6/19. 
 - * 描述此类作用, 逻辑复杂的说明一下主要思路 
 - */ 
 - public class LoginPresenter { 
 - /** 
 - * 用于进行网络请求 
 - * @params xxx XXX 
 - */ 
 - public void doLoginRequest(...){} 
 - } 
 
  
变量注释不允许使用与类/方法一致的注释形式; 
方法注释中不允许出现@params, @return的参数描述错误的情况, 必须实时更新; 
推荐: 
    - 一段逻辑建议使用/* */的方式;
 
    - 方法/参数建议添加 @Nullable, @NotNull, @UiThread 等注解;
 
 
代码风格 
    - 此git目录下同时存有 AndroidCodeStyleSetting.jar 配置文件,  用于AndroidStudio导入后按照统一风格进行代码的格式化.
 
    - 如果没有编写代码时随时格式化代码的习惯, 可以在AndroidStudio版本控制提交窗口右侧Before Commit中勾选Reformat  code选项.
 
 
Android基本组件 
强制: 
    - Intent通信时不允许传递超过1M的数据, 可以采用外部Presenter中转或者EventBus传递的方式;
 
    - Intent隐式启动时必须检查目标是否存在, 否则会出现目标未找到崩溃: if  (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ ONLY)  != null);
 
    - Activity/Service/BroadcastReceiver内如果有耗时操作, 必须采用多线程进行处理;
 
    - 应用内部发送广播时, 只能使用LocalBroadcastManager.getInstance(this).sendBroadcast(intent),  不允许 context.sendBroadcast(intent), 避免外部应用拦截;
 
    - 不允许在Application中缓存数据, 全局的共享数据可以使用某presenter存储, 或者使用SharedPreference读写;
 
    - Activity或者Fragment中动态注册BroadCastReceiver时,registerReceiver和unregisterReceiver必须要成对出现;
 
 
                        (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |