Android开发中,不同的开发团队,不同的开发人员,在实际编码中会有一些不同的地方。
但是,具有一定的更普适性的编码习惯,无疑还是相当重要的。本文主要罗列项目中常见的一些编码片段,并给出相关建议。

1.数组标识符应该紧跟在数组类型后面,而非变量后面


  1. int data[] = new int[1024];
  2.  
  3. 建议写成
  4. int[] data = new int[1024];

2.if中的条件判断在特定情况下需要合并


  1. if(lastestTime > recordTime){
  2. if(isLogin()){
  3. //...
  4. }
  5. }
  6.  
  7. 建议写成
  8. if(lastestTime > recordTime && isLogin()){
  9. //...
  10. }

3.if语句块在特定情况下可以简写


  1. if(isExistAccount()){
  2. return true;
  3. } else{
  4. return false;
  5. }
  6.  
  7. 建议写成
  8. return isExistAccount();

4.布尔型变量没必要再和true或false进行比较


  1. int status = hasSubcribe == true ? 1 : 0;
  2.  
  3. 建议写成
  4. int status = hasSubcribe ? 1 : 0;

5.inteface中方法没有必要使用public修饰,常量没有必要使用public static修饰


  1. public interface HostCallBack(){
  2. public static int MODE_INSERT = 1;
  3. public static int MODE_ALL =2;
  4.  
  5. public void clear();
  6. }
  7.  
  8. 建议写成
  9. public interface HostCallBack(){
  10. int MODE_INSERT = 1;
  11. int MODE_ALL =2;
  12.  
  13. void clear();
  14. }

6.重写equals方法需要遵守重写hashCode方法约定


  1. @Override
  2. public boolean equals(Object o) {
  3. if (this == o) return true;
  4. if (o == null || getClass() != o.getClass()) return false;
  5.  
  6. AccountVo accountVo = (AccountVo) o;
  7.  
  8. if (id != accountVo.id) return false;
  9. return name.equals(accountVo.name);
  10.  
  11. }
  12.  
  13. 建议增加上重写hashCode方法
  14. @Override
  15. public int hashCode() {
  16. int result = (int) (id ^ (id >>> 32));
  17. result = 31 * result + name.hashCode();
  18. return result;
  19. }

7.catch中不要再对Exception类型做判断


  1. try{
  2.  
  3. //...
  4.  
  5. }catch(Exception e){
  6. if(e instanceOf IOException){
  7.  
  8. //...
  9.  
  10. } else{
  11.  
  12. //...
  13.  
  14. }
  15. }
  16.  
  17. 建议写成
  18. try{
  19.  
  20. //...
  21.  
  22. }catch(IOException e){
  23.  
  24. //...
  25.  
  26. }catch(Exception e){
  27.  
  28. //...
  29.  
  30. }

8.方法体不宜太长,可以根据具体情况适当将方法体内部部分逻辑拆解出来

  1.  
  2. public void fixRecord(int rid, String name){
  3. //...
  4.  
  5. //方法体太长....
  6.  
  7. //...
  8. }
  9.  
  10. 建议写成
  11. public void fixRecord(int rid, String name){
  12. //...
  13.  
  14. updateRecord(int rid);
  15.  
  16. //...
  17. }
  18.  
  19. private void updateRecord(int rid){
  20.  
  21. //...
  22.  
  23. }

9.xml元素没有内容应该采用简写形式


  1. <item name="desc_tv" type="id"></item>
  2.  
  3. 建议写成
  4. <item name="desc_tv" type="id" />

10.switch语句块需要加上break


  1. switch (retCode){
  2. case 3
  3. // ...
  4. break;
  5. case 1:
  6. // ...
  7. break;
  8. case 2:
  9. // ...
  10. break;
  11. }
  12.  
  13. 建议写成
  14. switch (retCode){
  15. case 3
  16. // ...
  17. break;
  18. case 1:
  19. // ...
  20. break;
  21. case 2:
  22. // ...
  23. break;
  24. default:
  25. // ...
  26. break;
  27. }

11.变量名含义须具有唯一性

  1. 如:
  2. String password = AppAccountManager.getCurrentPassword();
  3. password = EncryptUtil.decrypt(password);
  4.  
  5. 建议写成
  6. String password = AppAccountManager.getCurrentPassword();
  7. String decryptPassword = EncryptUtil.decrypt(password);

12.无效的import需要删除

如果没有用到需要删除干净

13.注释不要与代码放在同一行

  1. 如:
  2. private int mState = STATE_ADD; // add record statef
  3.  
  4. 建议写成
  5. // add record statef
  6. private int mState = STATE_ADD;

14.不要犯单词拼写错误
项目中发现不少英文单词拼写错误,其实,AS默认情况下对疑似拼写错误的单词都会有波浪线等提示。

总之,在编码过程中,一些推荐的更标准的写法或风格总是没有错的,并且,一定的代码洁癖等也是一种很好的编码态度和习惯。

Android提升篇系列:Android项目代码优化实践的更多相关文章

  1. Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)

    注:本文中的recreate是指当内存不足时,Activity被回收,但再次来到此Activity时,系统重新恢复的过程.例如:当Activity A到Activity B时,如果内存不足,A被回收, ...

  2. Android提升篇系列:adb无法识别MX5等特殊机型

    发现自己Ubuntu系统adb无法识别魅族 mx5机型.操作具体如下(其他机型依然适用): 一.Ubuntu环境 1.查看自己当前设备的idVendor lsusb命令直接查看当前usb设别列表,找到 ...

  3. Android总结篇系列:Activity中几个主要函数详解

    Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又 ...

  4. 【转】Android总结篇系列:Activity Intent Flags及Task相关属性

    [转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...

  5. 【转】Android总结篇系列:Activity生命周期

    [转]Android总结篇系列:Activity生命周期 Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity ...

  6. 【转】Android总结篇系列:Activity启动模式(lauchMode)

    [转]Android总结篇系列:Activity启动模式(lauchMode) 本来想针对Activity中的启动模式写篇文章的,后来网上发现有人已经总结的相当好了,在此直接引用过来,并加上自己的一些 ...

  7. Android总结篇系列:Android Service

    Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件: ...

  8. Android 快速开发系列 ORMLite 框架最佳实践

    比较靠谱的Helper的写法: 1.DatabaseHelper package com.zhy.zhy_ormlite.db; import java.sql.SQLException; impor ...

  9. Android总结篇系列:Activity Intent Flags及Task相关属性

    同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...

随机推荐

  1. 关于C#中的线程重启的问题

    首先不管是C#也好,还是java也好,对于已经Abort的线程是无法再次Start的,除非是声明私有变量new一个新的线程,网上也有很多人说可以Suspend挂起线程,然后再Resume继续,但是相信 ...

  2. transform:rotate()将元素进行不同角度的旋转

    通过设置transform:rotate()可以将元素进行不同角度的旋转: 下面是一些测试代码: <!DOCTYPE html> <html> <head> < ...

  3. vuejs动态组件给子组件传递数据

    vuejs动态组件给子组件传递数据 通过子组件定义时候的props可以支持父组件给子组件传递数据,这些定义的props在子组件的标签中使用绑定属性即可,但是如果使用的是<component> ...

  4. 快速入门系列--WCF--08扩展与新特性

    最后一章将进行WCF扩展和新特性的学习,这部分内容有一定深度,有一个基本的了解即可,当需要自定义一个完整的SOA框架时,可以再进行细致的学习和实践. 服务端架构体系的构建主要包含接下来的几个要素:服务 ...

  5. JQuery学习之Ajax应用

    1.AJAX=异步javaScript和XML:在不重载整个网页的情况下,AJAX通过后台加载数据,并在网页上进行显示 2.load():简单但强大的AJAX方法,load()方法从服务器加载数据,并 ...

  6. Oracle Dataguard之switchover

    Oracle Dataguard的角色转换包含两类:Switchover和Failover.Switchover指主备之间角色转换,主库降为备库,备库升级为主库.而failover则是指主库出现问题时 ...

  7. backbone库学习-model

    backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...

  8. [Node.js] Node.js项目的持续集成

    原文地址:http://www.moye.me/2016/03/03/nodejs_ci_by_jenkins 引子 持续集成 (Continuous Integration,简称CI)是一种软件工程 ...

  9. nodejs操作mongodb

    一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...

  10. ATL是如何实现线程安全的引用计数和多线程控制的

    ATL是如何实现线程安全的引用计数和多线程控制的 正如标题所示,这是我经常被问到的一个问题,而每次我都从头开始给人说一次,其实说来过程理解起来的确有点复杂. 我们的每一个ATL Server Obje ...