Android 使用模板提高开发效率

3,850 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情

前言

我们平常开发时,可以使用IDE提供的一些功能来实现提高开发效率,避免写重复代码的效果。而Android Studio提供的Live Templates绝对算得上一个得力助手。可能有的人说了,这个东西很积累,我玩两天就不想玩了,我只想说,当你把一样东西玩到极致的时候,你就知道它为何强大。

我也不敢说自己时十分熟悉,但是也用得习惯,所以还是想分享一些使用的心得。

何为模板

这让我想到了很多年前,当年MVVM还刚开始传播,正是MVP大火之时,然后当时的人写MVP都有个习惯,按着一套模板来写,写个xxxActivity类,写个xxxPresenter类,写个xxxModel类,然后这些类有很多相同的代码。这时候就有人发明出了一些插件,通过这些插件你就能一键生成这些类,然后就做些许改动就行,有点流水线的意思。

Live Templates也是这个道理,我帮你生成一些常用的代码结构,然后只需要细节的改动就行,省去很多写重复代码的时间,有的人可能会说封装啊,其实如果你项目大的话,你就会发现,即便你封装了很多东西,哪怕你甚至去封装和业务相关的代码,都还是照样会写很多重复代码。Live Templates相对于上面的插件,会更轻量级,而且这是官方提供的工具。

Live Templates在我使用的时候主要是能为我提供3个好处:

(1)快速生成代码,不用再写点点点
(2)防止复制时可能会出现的一些细节上没改过来
(3)会有我自己的提示,忘记一些API的使用方式的话不用再花时间去查

使用Live Templates

逼逼了这么多,得上点实际的才能让人知道好不好用。

在AS中点开 File -> Settings -> Editor -> Live Templates

f2cd04836394571bf83af0cb936912c91ecdb153ef5adfa4905c24dbc156cd6fQzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2NzY4NjIxODMwNTVfMjAyMy0wMi0xOCAxNy01NC00NuWxj+W5leaIquWbvi5wbmc=.png

直接点击右边的+号,Template Group创建一个组,我这里创建的就是kylin,选中组后点+号Live Template就能创建模板了

25d0412695f345704fe3624f9376eb5b945db650b4086192bb2eac89b8832d62QzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2NzY4NjIxODQ1NDhfYS5wbmc=.png

创建模板后在页面中的Template text中输入模板内容,在change中选择模板范围,有变量的话再Edit variables中设置变量,这些后面都会讲。

基本就是定义几个组,然后组内有几个模板,我个人是分为3个组,一个是常用的功能代码,一个是和业务相关的,一个是其它操作。我这里抽几个模板出来写个Demo来演示(因为个人的所有模板涉及公司业务,所以不能直接展示,我就抽几个出来演示,效果一样的)

注意了,这里有个细小的知识点,看到我自己写的模板,都是kfc开头的,你以为是随便搞得?当然不是,这是为了避免和系统的关键字冲突并且让我更好的查我忘记的方法,就是上面的好处(3)

kfc就是kylin fast create,缩写kfc,当我忘记某个方法时,我只需要输入kfc

lQDPJw5Lp5BzzYTNA8DNBQCwDuj9G0VVlvkD7NIzhgArAA_1280_960.jpg_720x720q90g.jpg

看见没有,这是有注释的,中文注释,比如我想使用Glide,哎哟但是我忘记怎么调用了(当然我不可能忘记,举个例子而已),一般怎么做,要么去其它使用的地方copy代码过来,没写过就百度去收然后拉下来,但我这里一输kfc,找到我的注释,一会车,马上解决。

这就能实现忘记一些API的使用方式的话不用再花时间去查

然后再看看快速生成代码的效果,我这里还是要提一句,这种效果对java来说比对kt会明显很多,因为kt有时候java很多的代码他一行就能实现,所以这种就不用写模板。

拿我最喜欢使用的模板来说,假如写java的双检锁单例,你会怎么写,而我是这样的

lQHPJwPQpSRnjITMys0BaLDfOCuTku721wPs0jGSQEcA_360_202.gif

就一下就能生成了,快得很。而且这里比复制安全多了,比如复制你忘记改类名了(当然这个编译器会报红给你),假如不会,那就细节上出问题了,而我这里直接生成的话,类名就是我这个类的类名。

举例模板

这里可以举例一些我常用的模板的定义

比如上面说的单例,在Template text中写模板

private static volatile $name$ m$name$ = null;

private $name$(){}

public static $name$ getInstance(){
    if (m$name$ == null){
        synchronized ($name$.class){
            if (m$name$ == null){
                m$name$ = new $name$();
            }
        }
    }
    return m$name$;
} 

然后在Change里面选java,因为这段代码是java的嘛,不要全选,不然比如你全选会包括kotlin,你会在kotlin中也能输入single打出这段代码,这就没必要了

然后因为我这里有变量name,所以要在Edit variables中给变量定规则。这里Expression里面选的就是类名简称,所以这里的name在补全出来之后就会替换成类名。

25d0412695f345704fe3624f9376eb5b945db650b4086192bb2eac89b8832d62QzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2NzY4NjIxODQ1NDhfYS5wbmc=.png

这是其中一种设置模板的方法,带变量的方式。但是因为用变量的话得设置Edit variables,但它有时候并不能去适配所有的场景,所以我这边还有一种不带参数的设置模板的方式。

其主要核心有2点:
(1)随便用什么代替变量,主要是补全后会让那个地方爆红,然后去修改变量就行(这比复制粘贴更安全)
(2)宁可多写,然后删除用不上的代码,因为我们删除的速度比写代码的速度快。

比如我对一个Glide的使用设置一个模板,我可以这样写kfcGlide

Glide.with(context)
        .load(xxxxx)
        .placeholder(xxxxx)
        .error(xxxxx)
        .into(imageView);

这里xxxxx只是占位符,补全后编译器会爆红给你提示,再替换参数就行,然后如果你不想使用placeholder或error的话,直接删除就行,好过你写模板的时候不写它们,但要用的时会加上去,删总比敲的快。

其它

1. Expression

首先关于Expression的各个含义,这个网上能随便找到,我这里就不额外说了,主要我也不敢说全部都懂,只用了其中一部分。

2. 导出模板

关于如何导出模板,比如我们写了很多模板,但是我们因为某些原因要换另外一台的AS(你们不要多想,我指的是家里的电脑的AS和公司电脑的AS),这时候,我们总不可能把这么多模板重新写吧,哪怕一个个复制粘贴过来配置也是花费时间啊,其实模板能导入导出

File -> Manager IDE Settings -> Exprot Settings -> 选所有的Live Templates选项

导出后能看到一个xml,这个就是我们导出的模板文件

31fa138d4b2f7a404f70350fadf36d2fcdf1fdd624ab54d60e211edb46715915QzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2NzY4NjIxODMzMTdfMjAyMy0wMi0yMCAxMC00NS0wMuWxj+W5leaIquWbvi5wbmc=.png

导入也一样,这里就不演示了

3. 系统默认提供的Live Templates

可以看到上面说明的是如何自定义我们的模板,但其实AS默认也是会提供一些模板的,看这张图就知道

156bd5474c45d4ab43a356a778f78b9990438cf13d8595d4be3ec8385fb48176QzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2NzY4NjIxODM1MTRfMjAyMy0wMi0yMCAxMC00Ny0zMOWxj+W5leaIquWbvi5wbmc=.png

AS有给你提供Java的,kotlin的,甚至C++和Python的都有。这个就太多了,如果想学的话只能自己去网上查,我很早之前学过一次,但都忘了很多,其实它给你提供的模板也是很有用的,举个例子,比如说写for循环

如果你不知道模板的话,你可能就会直接写for(){},然后在把输入位置移动到括号里输int i = 0 .......
但是如果你使用AS给你提供的模板,你只需要输入5.fori就可以了

lQHPJwuhiJTe7YTNAeDNAWiw_HRs3GCVNZoD7NIykgBHAA_360_480.gif