美文网首页
干货!Android日常编码习惯总结,让你代码更完美

干货!Android日常编码习惯总结,让你代码更完美

作者: 南山村靓仔 | 来源:发表于2020-05-28 19:40 被阅读0次

    1 方法代码别太长

    遵循单一职责原则,一个方法实现的功能尽量单一,这样可增加可读性,也利于方法复用

    2 类、重要方法一定要加注释

    创建类的时候,增加类注释,这在协同开发中非常重要,能方便其他同事快速了解类主要功能

    /**
     * @author:cj on 2019/8/26 0026 10:27
     * @dec:指令下发后,子线程操作处理 
     */
    

    重要方法前加入方法描述、参数、返回值描述,具体

    /*****************************************************************************
     功能描述  : 从一个csv文件中获取一行csv的记录
     输入参数  : pName       : 文件名(含路径)
                 iLineNum    : 行号。从1开始计算,1表示第一行
     输出参数  : pbyLineData : 一行的数据,存放在该内存中
     返 回 值  : 成功: 一行的数据长度
                 失败: 对应的错误代码
    *****************************************************************************/
    

    3 写出最优化的布局

    1.选择性能消耗更低的ViewGroup,能用LinearLayout、FrameLayout,就别用RelativeLayout,因为RelativeLayout功能较复杂,布局过程会花费更多的CPU时间
    2.布局需要重用时,使用<include>标签、<merge>标签,把布局抽取出来
    3.按需加载的界面,使用ViewStub实现,当需要时才会将ViewStub中的布局加载到内存,能提高程序初始化效率

    4 onDraw中不要做初始化操作

    onDraw方法可能会被频繁调用,所以不要在此方法中创建对象,毕竟对象的频繁创建和销毁是很影响性能的

    5 配对方法配对调用

    因为配对方法他们的触发时机也相应是配对的。能保证注册、反注册等配对操作顺利执行,防止内存泄漏。比如onResume中注册监听,那么我们就在onPause中取消监听;
    配对方法举例:
    onCreate---onDestroy
    onResume---onPause
    onAttachedToWindow---onDetachedFromWindow

    6 try catch要把错误详情打印出来

    使用Log.getStackTraceString(e)能将错误详细堆栈打印出来,有利于排查问题

    catch (Exception e) {
                MGLogger.d(TAG, "XXX catch exception:" + Log.getStackTraceString(e));
      }
    

    7 设计先行原则 学会画流程图等

    在进行功能开发前,尽量先通过流程图等把逻辑梳理清楚,把需求弄明白后再进行代码开发,逻辑理清楚了,才不会在测试阶段因为逻辑问题导致花费大把时间反复修改bug,甚至需要推倒重来

    8 先写类、方法,再从低到高补充代码实现

    先写出整个代码逻辑方法框架,再去实现具体代码,能让代码书写更清晰,最重要的是能保证逻辑上不出问题

    9 不要在代码直接使用常量

    比如下面代码,我们需要把com.xxx.action.VOICE提取出来,便于常量管理、修改

    修改前
    ("com.xxx.action.VOICE".equals(action)) {
    }
    修改后:
    private static final String ACTION_XX_VOICE="com.hebu.action.VOICE";
    (ACTION_XX_VOICE.equals(action)) {
    }
    

    对于数值,由于我们无法快速了解其含义,所以尽量封装成常量,并通过名字进行区分,以下面为例,可以增加代码的可读性:

    修改前:
    if (type == 10000) {  
          ...
    } else if (type == 10001) {  
          ...
    } else if(type == 10005){
          ...
    } 
    
    修改后:
    private static final String GD_ADD="10000";
    private static final String GD_QUERY="10001";
    private static final String GD_DELETE="10005";
    
    if (type == GD_ADD) {  
          ...
    } else if (type == GD_QUERY) {  
          ...
    } else if(type == GD_DELETE){
          ...
    } 
    
    

    10 避免过多的if else

    有很多人写代码都是这样的,这样的代码让人看的头皮发麻

         if (...) {
                if (...) {
                } else {
                    if (...) {
                    } else {
                        if (...) {
                        } else {
    
                        }
                    }
                }
            } else {
    
            }
    

    那么如何优化?可以从这几点出发:
    1、将else中的判断尽量提取到方法最前面,这样前置判断逻辑可以显得更加清晰

            if(size<0){
                return;
            }
            if(a!=9){
                return;
            }
            if (...) {
               ...
            }
    

    2、将子方法尽量提取出来,避免一个方法做太多的事情
    3、策略模式,接口抽取,每种策略实现该接口,分别实现对应的功能

    11 尽量避免频繁创建大量、临时的小对象

    频繁分配内存&垃圾GC回收,会导致内存抖动,容易出现卡顿

    12 慎用枚举

    枚举比占用的内存空间要比标准类型大。因为它会把每一个对象声明为一个类对象
    比如:

    public enum Animal {
        DOG,CAT
    }
    

    javap对类编译后,可以看到,实际上是创建了一个Animal类,且创建了DOG、CAT两个类对象,所以每个枚举对象实际都是static final的类对象,所以枚举跟两个静态INT常量比内存,那肯定是多得多的。

    public final class Animal extends java.lang.Enum<Animal> {
      public static final Animal DOG;
      public static final Animal CAT;
      public static Animal[] values();
      public static Animal valueOf(java.lang.String);
      static {};
    }
    

    感兴趣推荐看下此篇文章:
    从一道面试题开始说起 枚举、动态代理的原理 https://blog.csdn.net/lmj623565791/article/details/79278864

    13 单例构建传getApplicationContext()

    单例模式生命周期和应用生命周期一致,这样长生命周期的单例对象持有短生命周期Activity的引用,会导致内存泄漏。所以一定要传ApplicationContext,如果单例类调用过多,可以像下面一样在单例类中将context统一转化为ApplicationContext

    public static XXXX getInstance(Context context) {
           this.context=context.getApplicationContext();
    }
    

    本篇记录平常常见编码的注意要点,持续更新...喜欢请点赞!谢谢

    相关文章

      网友评论

          本文标题:干货!Android日常编码习惯总结,让你代码更完美

          本文链接:https://www.haomeiwen.com/subject/rakvahtx.html