分享两个提高效率的AndroidStudio小技巧

原文:https://www.jianshu.com/p/68fd5373effc

这次分享两个 Android Studio 的小技巧,能够有效提高效率和减少犯错,尤其是在团队协作开发中。

  1. Getter 模板修改--自动处理 null 判断
  2. 格式化代码自动整理方法位置--广度 or 深度

好了,下面优先介绍下这两个小技巧有什么作用,然后再给出使用教程,想直接看教程的可以直接跳到最后。

目的

  1. Getter 模板修改

开发过程中,经常会遇到空指针异常,尤其是在线上 bug 中,由于未进行 null 判断处理导致的 bug 比例肯定不低。

另外,model 层经常需要根据服务端接口返回的数据结构进行建模,实体类中常见的有 String 类型和 List 类型的字段。而服务端的接口文档里通常都会说明哪些字段不会为空,所以移动端建模后使用相应的实体类数据时,很少或者说会经常性忘记去做 null 判断处理。

正常场景下,也许测不出 null 异常的问题,但如果服务器出了问题,返回了错误的数据,或者在某些特殊的场景下,某些字段的值偏偏就是 null,那么此时如果在使用的地方没有进行 null 判断处理,经常就会有问题出现,如果 app 刚好又有缓存策略,那么可能会导致特别严重的问题。

鉴于此,我是建议,在建模创建实体类时,如果有 String 类型和 List 类型的变量时,这些类型的 getXXX() 方法中直接进行 null 判断处理,确保不会返回 null 值,这样外部使用时就不用再去进行 null 判断处理。如下:

private String mString;
private List<String> mList;

//如果String类型的字段为空,那么返回"",外部在使用getString().equal()等之类方法时如果忘记进行null判断,也不会造成空指针异常
public String getString() {
    return mString == null ? "" : mString;
}
//如果List类型字段为空,那么返回空列表。外部在使用getList().get(i)或者getList().size()等时如果忘记进行null判断,也不会造成空指针异常
public List<String> getList() {
    if (mList == null) {
        return new ArrayList<>();
    }
    return mList;
}

这样处理的好处是统一在实体类内部进行 null 判断处理,外部使用的地方无需再一个个的去进行 null 判断处理,如果外部使用时忘记进行 null 判断处理,也不会导致空指针异常。

但,如果每次创建完实体类后都靠开发人员的主观意识来为对应的 getXXX() 方法增加相应的 null 判断处理代码,很不靠谱。一切靠主观意识来遵守的规范都不靠谱,总会由于各种原因,如任务赶,太久未接触等等而忘记。

所以,推荐 getXXX() 方法都通过 Android Studio 来自动生成相应代码,那么,就可以通过修改 AS 的 Getter 方法的模板文件,来达到自动生成相应的 null 判断处理代码,以工具代替手工,一提供效率,二强制遵守规范,三解决靠主观意识不靠谱问题。


  1. 格式化代码自动整理方法位置

当 app 经过越来越多的迭代,增加越来越多的功能时,项目难免会逐渐庞大起来,有些类里的代码会渐渐多了起来。

为了易于阅读,通常对类里的代码会根据各自的职能划分到一个个方法中,尽量遵守方法的单一职责,这样一来,各个方法之间难免会有关联关系,a 方法调用了 b,c 方法,b 方法调用了 d 方法,等等。

这么多的方法,如果不按照一定的规范来整理、摆放的话,当类里的方法越来越多时,这些方法位置杂乱无章的摆放会给 review 人员的阅读,或者过了很长一段时间后本人回来自己阅读时造成一定的障碍。

常见的是规范有一种是按照权限来归纳整理,private 方法集中在一起,public 方法集中在一起。

还有一种规范是按照就近原则摆放,a 方法调用了 b 方法,那么 b 方法位置就尽量靠近 a,我个人倾向于这一种规范,这样在熟悉一个类里的代码时,从上往下慢慢过下来即可,不同跳过来跳过去的。

那么,同样的问题,靠开发人员的主观意识来遵守这种规范是很不靠谱的。写代码过程中,新建了一个方法时,并不会特别特意的去考虑要将它放在哪,基本就是就近放,这样也还好,还算稍微有些关联,有些顺序。

但,如果是在后期新增功能,在旧代码中又去新建方法时,如果对这个类不熟悉,这时候通常都不会去仔细的考虑新写的方法应该要放在哪,要么就是放最后,要么随手就近,久而久之,类里的方法就会越来越杂乱无章。

所以,一切靠主观意识来遵守规范的行为都不靠谱。

鉴于此,推荐打开 Android Studio 自动整理方法位置的功能,借助工具来遵守规范,提高效率的同时也能写出优美的代码。

教程

Getter模板修改教程

  1. 随便建个类,写几个属性,然后按快捷键 Alt + Insert 或在代码区域 右键 -> Generate -> Getter,然后会有一个弹框:

第一步

  1. 此时先不要点击 OK 键,先点击右上角的 的图标,来修改模板文件:

第二步.png

  1. 此时只有一份 AS 默认的生成 Getter 方法的模板,要对这份模板进行修改,所以接下去可以选择新建一份新的模板文件或者在原文件上修改都可以,比如我新建了一份 NotNull_getter 模板文件:

第三步

  1. 模板文件需要修改的地方就仅仅是在$(name){…} 代码块里的 return 生成规则,原本规则是统一返回字段值本身,根据规范新增两条规则:增加 String 类型和 List 类型的生成规则。以下是修改后的整个模板文件代码,可以拷贝过去直接使用:
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
  #if ($StringUtil.startsWithIgnoreCase($name, ‘is‘))
    #set($name = $StringUtil.decapitalize($name))
  #else
    is##
#end
#else
  get##
#end
${name}() {
  #if ($field.string)
     return $field.name == null ? "" : $field.name;
  #else
    #if ($field.list)
    if ($field.name == null) {
        return new ArrayList<>();
    }
    return $field.name;
    #else
    return $field.name;
    #end
  #end
}
  1. 建完新模板文件后点击 OK 键,以后通过右键 -> Generate -> Getter 来生成 getXXX() 方法时,注意一下模板文件选择是否正确,一般首次选择后以后都是默认上一次的:

第五步

  1. 效果,getXXX() 方法都是 AS 自动生成,而且根据修改后的模板,也能保证 String 类型和 List 类型都不会返回null值。

效果


格式化代码自动整理方法位置教程

  1. 先开启自动整理方法位置的功能,位置:
    File -> Settings -> Editor -> Code Style -> Java -> Arrangement

功能开启

如上图的 2,3 点功能,默认都是关闭的。

第 2 点功能:Keep overridden methods together – keep order

意思是将由 override 标志的方法都集中放置,建议将此功能开启,override 的方法通常要么是系统的一些回调方法,要么是我们自己定义的一些接口,这部分方法本身就有一定的关联性,集中在一起很合理。

注意,AS支持两种规则,一种是 keep order(按原有顺序),一种是 order by name(按照方法字母表顺序)。至于哪一种较合适,个人喜好,我是选择的 keep order。

第3点功能:Keep dependent methods together

意思是将相关的方法按照某则规则放在一起,AS支持两种规则:

breadth-first order & depth-first order

我的理解,说得通俗点也就是广度优先和深度优先,这个功能建议开启。

举个例子,假设一个类里有这么几个方法,a 调用了 b, c, d, 而 b 调用了 e, f,如果是按照广度优先来整理这些方法的位置时,breadth-first order:

广度优先

广度优先整理后的方法顺序:a, b, c, d, e, f。也就是说,方法 a 里面调用了三个方法,那么优先将这三个方法摆放在方法 a 下方,此时并不去考虑这三个方法里是否还调用了其他方法。等过完方法 a,那么以同样的道理再去整理方法 b 中调用的方法的位置。

但如果是深度优先,那么整理后的方法顺序就不同了,如下,depth-first order:

深度优先

深度优先整理后的方法顺序:a, b, e, f, c, d。也就是说,方法 a 内调用了三个方法,第一个方法是 b, 然后方法 b 又调用了 e, f。所以方法 b 紧接着 a 方法下面摆放,方法 e, f 紧接着方法 b 下面摆放,直到 e, f 里都没有其他方法了。然后再重新回到方法 a 内继续往下过方法 c 的位置,以此类推。

两种规则有各自的好处,广度优先侧重于优先梳理每个方法的大体工作;而深度优先则侧重于梳理每个方法的实现细节,流程步骤;

目前我是选择广度优先,因为我更侧重于关注每个方法大体的工作,对于一个不熟悉的方法,大概过一下它里面的每个方法大体上做了什么,就能大概理解这个方法的大体工作。

  1. 以上仅仅只是开启功能而已,而要借助 Android Studio 来自动整理方法位置,就是通过 AS 的格式化代码功能,快捷键也就是 Ctrl + Alt + L 。但这个格式化操作默认是没有启动对方法进行整理的操作的,每次按完快捷键后会有如下提示:

功能开启2

重点在底部那行灰色的字体,通过快捷键 Ctrl + Alt + Shift + L 可以打开配置 dialog:

配置

Rearrange code 默认是没有勾选的,所以想要启用整理方法的功能,需要将这个勾选上,以后在通过 Ctrl + Alt + L 来格式化代码时,AS 就会根据我们在第一个步骤中设定的规则来自动整理方法的位置。


QQ图片20180316094923.jpg

最近(2018-03)刚开通了公众号,想激励自己坚持写作下去,初期主要分享原创的Android或Android-Tv方面的小知识,准备可能还有点不足,感兴趣的可以先点一波关注,谢谢支持~~

作者:请叫我大苏
链接:https://www.jianshu.com/p/68fd5373effc
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/tc310/p/12295342.html

时间: 2024-10-12 03:50:02

分享两个提高效率的AndroidStudio小技巧的相关文章

一个提高查找速度的小技巧

在一个数组中查找某一个元素,或是在一个字符串中查找某个字符,我们一般都会写出如下代码.这样的代码虽然简洁明了,但在数组元素很多的情况下,并不是一个很好的解决方案,今天我就来分享一个提高查找速度的小技巧. //在一个int数组中查找某个元素 int find(int A[],int n,int element) { for( int i = 0; i < n; i++ ) { if( A[i] == element ) return i; } return -1; } //在一个字符串中查找某个字

提高myeclipse性能的小技巧(个人整理)

提高myeclipse性能的小技巧,个人整理,还有很多不全的地方,希望大家提出,共同进步. 1.工具栏的设置 工具栏中有很多不常用的图标,可以通过windows->Customize Perspective自己选择. 2.启动项设置 myeclipse在启动时,会加载相关启动项,其中有很多是我们用不到的容器,我们可以通过相关配置来选择启动与否.如:我不用jboss这个容器,我就去掉勾选,这样,在启动时,就不会加载此容器. 3.设置默认编辑器 大家都碰到过这样的问题,打开一个jsp页面或者html

(转)Facebook内部分享:26个高效工作的小技巧

春节假期马上就要结束了,该收收心进入新一年的工作节奏了~分享 26 个高效工作的小技巧,希望对大家有所帮助~(我发现自己只有最后一条执行得很好,并且堪称完美!) 1.时间常有,时间优先. 2.时间总会有的:每天只计划4-5 小时真正的工作. 3.当你在状态时,就多干点:不然就好好休息:有时候会连着几天不是工作状态,有时在工作状态时却又能天天忙活 12 小时,这都很正常的. 4.重视你的时间,并使其值得重视:你的时间值 1000 美元/小时,你得动起来. 5.不要多任务,这只会消耗注意力:保持专注

Facebook内部分享:26个高效工作的小技巧

春节假期马上就要结束了,该收收心进入新一年的工作节奏了~分享 26 个高效工作的小技巧,希望对大家有所帮助~(我发现自己只有最后一条执行得很好,并且堪称完美!) 1.时间常有,时间优先. 2.时间总会有的:每天只计划4-5 小时真正的工作. 3.当你在状态时,就多干点:不然就好好休息:有时候会连着几天不是工作状态,有时在工作状态时却又能天天忙活 12 小时,这都很正常的. 4.重视你的时间,并使其值得重视:你的时间值 1000 美元/小时,你得动起来. 5.不要多任务,这只会消耗注意力:保持专注

提高效率的 Android Studio 技巧汇总

这是从Philippe Breault的系列文章<Android Studio Tips Of the Day>中提取出来的自认为精华的部分. 这些技巧在实际应用中能够非常大的提高工作效率. 关于快捷键 The File Structure Popup ctrl+f12此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法.勾选上“show anonymous classes”后其功能相当于Eclipse中的ctrl+o The Call Hierarchy Popup ctrl+

提高算法效率的一些小技巧

 1.善于写变量作用域,不用的变量及时释放掉 { int a = 0; //一系列操作 }//执行到这里的时候,大括号里的a就被释放了   2.前自增自减要比后自增自减效率稍微高一点 ++i   效率>   i++ --i   效率>   i--  3.if(条件表达式) a.这里的条件表达式可以先计算出来,得到一个结果,放到if()小括号里面: b.也可以直接放到()里面 建议:适当的情况之下,条件表达式直接放到小括号()里面,因为:(逻辑运算表达式的断路问题^_^) 逻辑表达式,&

提高效率—编程中的技巧

前几天学习了牛腩--新闻发布系统,里面提到了一些编码技巧,总结了一下和大家分享,有时候就会因为你不知道的这一小点能提升你很高的工作效率! 1.连续按两下tab键,对应的代码段就会自动添加(如:if判断,for循环) 2.Ctrl+k&Ctrl+D(将代码段排序) 3.未编写完成哪里,特别方便! 4.#region + 名称      (可以将一些代码块放到一起) 内容段 #endregion 查找位置:编辑-IntelliSense(I)-插入代码段 快捷键:Ctrl+k & Ctrl+x

分享10条PHP性能优化的小技巧,帮助你更好的用PHP开发

1. foreach效率更高,尽量用foreach代替while和for循环. 2. 循环内部不要声明变量,尤其是对象这样的变量. 3. 在多重嵌套循环中,如有可能,应当将最长的循环放在内层,最短循环放在外层,从而减少cpu跨循环层的次数,优化程序性能. 4. 用单引号替代双引号引用字符串以实现PHP性能优化. 5. 用i+=1代替i=i+1.符合c/c++的习惯,效率还高. 6. 优化Select SQL语句,在可能的情况下尽量少的进行Insert.Update操作,达到PHP性能优化的目的.

EntityFramework6中关闭自动识别变更功能提升效率的一点小技巧

默认情况下,ef6能够在调用以下方法时自动判别实体是否变更: DbSet.Find DbSet.Local DbSet.Remove DbSet.Add DbSet.Attach DbContext.SaveChanges DbContext.GetValidationErrors DbContext.Entry DbChangeTracker.Entries 当上下文追踪很多实体,并且你在一个循环中调用很多次这些方法的时候,你可以在循环之前先关闭自动识别功能,可以极大提升效率.例如: usin