热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

浅谈Android编码规范及命名规范

本文主要总结一下Android项目的开发规范:1、编码规范2、命名规范。有需要的朋友可以看下

前言:

  目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑。

  现大框架已经完成,正在进行细节模块上的开发

  抽空总结一下Android项目的开发规范:1、编码规范 2、命名规范  

  注:个人经验,经供参考

一、Android编码规范

  1、学会使用string.xml文件

  在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml

  比如一个保存按钮 , 不规范写法:

 

    这里给它的文本内容设置为"保存",那么一个app中所有的保存按钮都这样写。当有一天要修改需求了,要求把“保存”文字改成“提交”,那么我们只能去一个个布局文件中修改,

  岂不浪费大量时间又可能会存在漏掉修改的情况。

  规范写法:

 

    而在string.xml文件中:

    保存

  这种写法,往后需要修改,只需要在string.xml文件中修改一行代码 便实现了整个APP的该文本内容修改。

  2、学会使用color.xml ,dimens.xml文件的使用

  同string.xml使用一致,同学们应该都懂的,切勿因为一时的懒,导致后期的迭代费时费力。

  3、团队协同确定一套标准Activity的onCreate()方法中代码执行流程

  其实刚接触Android的时候,我的不规范代码是这样的:

 private Button scan;  //扫描按钮
 private Button create;  //创建按钮
 private ArrayList datas; //数据源
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 create = (Button) findViewById(R.id.create);
 scan = (Button) findViewById(R.id.scan);
 scan.setOnClickListener(this);
 create.setOnClickListener(this);
 datas = new ArrayList<>();
 datas.add(new Integer(1));
 datas.add(new Integer(2));
 datas.add(new Integer(3));
 datas.add(new Integer(4));
 }

    什么都不管,所有的操作代码都写在onCreate()方法中,包括find控件。设置监听事件,加载数据源等等。

  可以看到现在就2个控件一个数据源,代码就这么多了,如果一个界面有10多个控件呢,那onCreate()方法中的代码量就成倍数的多起来了。

  所以所有的Activity都要设定一个统一的规范。

  我们都知道,一个Activity中有基本都有的操作:

    ①、初始化变量

    ②、初始化控件

    ③、设置监听事件

    ④、加载网络数据并显示

  那么就可以将以上的代码分门别类的放在这几个方法中

  比如一段规范代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 private Button btn_scan;  //扫描按钮
 private Button btn_create;  //创建按钮
 private ArrayList datas; //数据源
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initVariables();
 initView();
 initEvent();
 loadData();
 }
 //初始化变量,比如 上一个Activity传来的Intent的数据 本Activity中一些标记变量等
 private void initVariables() {

 }
 //加载数据源
 private void loadData() {
 }
 //注册监听事件
 private void initEvent() {
 btn_scan.setOnClickListener(this);
 btn_create.setOnClickListener(this);
 }
 //初始化控件
 private void initView() {
 btn_create = (Button) findViewById(R.id.create);
 btn_scan = (Button) findViewById(R.id.scan);
 }
 //设置点击事件
 @Override
 public void onClick(View v) {
 switch (v.getId()){
  case R.id.btn_scan:
  //扫描二维码
  startActivity(new Intent(this,ScanActivity.class));
  break;
  case R.id.btn_create:
  //生成二维码
  startActivity(new Intent(this,CreateActivity.class));
  break;
 }
 }
}

    可以看到,onCreate()中就那么几个方法了,我们需要找问题的时候在相应的方法中去找即可,既方便又清晰。

其实这种操作我们可以写一个BaseActivity作为它的的抽象方法,然后让Activity继承这个BaseActivity基类重写方法即可,涉及到架构,这个往后再说。

  4、团队协同确定一种控件的点击事件OnClickListener()

    Android给我们提供5种给控件设置OnClick的方法,个人觉得项目中用的最多的就是

      ①、参数this 然后Activity 实现 View.OnClickListener接口  重写 onClick()方法

             btn_create.setOnClickListener(this);

        ②、直接参数new OnclickListener()的

 btn_create.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) { 
  }
 });

      其他三个方法个人觉得尽量不要用。而这两种方法中第一种 是更好的,因为我们可以通过switch--case 的方法区分不同控件的点击事件,代码更清晰简约。

    当然第二种方法也是可以的,但是切记同一个项目中最好只有一种方式,便于后期的维护。

//设置点击事件
 @Override
 public void onClick(View v) {
 switch (v.getId()){
  case R.id.scan:
  //扫描二维码
  startActivity(new Intent(this,ScanActivity.class));
  break;
  case R.id.create:
  //生成二维码
  startActivity(new Intent(this,CreateActivity.class));
  break;
 }
 }

    5、尽量少用全局变量static进行传值操作

    static的特性大家应该都是知道的,他会一直占用一部分内存,虽然很少,但是一个项目中成百上千个使用的话,对项目是非常不好的。

    建议页面之间的传值还是用Intent ,实现没有好的解决方案的再用static , PS ,我之前公司的项目就非常大量的使用了static

       注:有些同学可能对Activity和Fragment的互相传值不大会,这里推荐一个解决方案:浅谈EventBus , 对我来说是项目必备,但是也要合理运用

 6、Activity中尽量不要使用内部类

    这里以RecyclerView举例,一款非常棒的控件,有了它再也不用ListView了 ,浅谈RecyclerView(完美替代ListView,GridView)

    一个RecyclerView是配套一个Adapter和一个ViewHolder的。

    不规范做法:部分同学图省事(当然放在一个Activity中确实方便数据传输和item点击事件操作),把它们都写在一个Activity中,这样是不可取的,因为大大的增加了单个Activity的代码量,对维护来说很不方便。

    规范做法: ViewHolder一个类 ,Adapter一个类 , 分工明确 ,避免一个类中代码量过多的问题。

    注:ListView,ViewPager 使用同上

    至于类的分类,有的同学喜欢一个功能模块放在一个包下,比如一个功能点的Activity , Adapter ,ViewHolder都放在一个包下

        有的同学喜欢一种类的放在一个包下,比如将所有的Activity放在activitys包下,将所有的Adapter放在adapters包下。

    这都是后话,将来学习架构的时候再详谈

  7、使用ArrayList代替HashMap

     据说,是据说,ArrayList使用的内存要低于HashMap,因为android手机参差不齐,所以开发过程中对内存还是非常重视的,能省则省。

    PS:我的项目中基本使用的ArrayList,除非是ArrayList代替不了的数据结构

  8、团队规范统一的第三方

     现在方便又好用的第三方太多了,图片框架好几个优秀的,推送好几个优秀的,即时通讯好几个优秀的。

     注意使用太多的第三方会导致程序过大,而且应用有一个最大方法数的限制,避免实现一种功能的第三方,团队成员使用的都是不一样的第三方。

  9、统一代码格式

    经典的就是for循环了, 一种是左括号放在最后,一个是另起一行。 统一下,界面看起来舒服,个人建议左括号放在最后的方式,别问我为啥,大学老师推荐的,理由:忘了。

 for (int i = 0; i <10; i++) { 
 }
 for (int i = 0; i <10; i++) 
 { 
 }

     10、不同功能代码之间要有一行空格分开

    配合的写上注释,告诉维护的同学 ,哪一段代码是进行什么操作的

    为了代码清晰 也为了维护的同学少长两根头发。。

  11、如果你是Android Studio开发

    请频繁使用Ctrl+A  --》  Ctrl +Alt + I 

--------------------------------------------------------------------------------------------------------------------------

二、Android命名规范

  命名规范:驼峰法,下划线分割法。

  1、Java类文件

  ①、Activity:以Activity作为后缀,这个相信大家AS给你的都帮你做好了。

  ②、Adapter: 以Adapter作为后缀

  ③、ViewHolder: 以ViewHolder作为后缀

  ④、实体类Entity:以Entity作为后缀

  如下,我是以功能模块分包,大神勿喷,个人喜好:

     2、xml文件

  ①、layout.xml

    Activity的布局文件以activity_ 开头,AS提供的。

    列表项的布局文件listview  以 item_list_开头。

  ②、控件的命名

    缩写,这个看个人了,

    我的经验,比如:

    LayoutView    ----    lv

    TextView        ----    tv

              Button          ----    btn

    ImageView     ----    img

  切记,不要使用拼音命名,即使英文这么菜的博主我开发都开着有道词典。

  最后,编码一定要写注释,你命名的如果英文不是立马能看懂的,请一定要写上注释。


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
author-avatar
111wen_292
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有