00:00
欢迎大家继续观看上硅谷ID技术视频,这节课我们提一下ID中的task。在前面咱们讲到项目的生命周期的时候,给大家提到过当前product,以及当前product底下所有的子product。它最终会被解析为一系列的task,形成task的有效无环数。所以当前项目你也可以理解成task对象的一个集合。那什么是一个task?一个task,它本质是一个逻辑上较为独立的执行单元。比如编译Java源码,比如拷贝文件,比如说打一个JA包,比如说执行一个系统指令等等这一系列的操作,其中每一个操作你都可以理解成一个task。另外一个task也可以读取或者设置当前工程的某个属性,以完成特定的操作。那接下来咱们就要做一个task的入门。首先,我们来看一个最简单的task。
01:05
这样我们带着大家写一个,首先在build的文件里边。通过task来声明一个任务。你会发现咱们通过task生命任务的时候,本质。啊,就是调task方法,然后它这里有好几个承载的,咱们也可以啊,直接传一个任务名也可以啊,直接传任务,传一个任务名,再传一个B包。当然,我们也可以传一个map。在这个map里边封装task的行为,然后再传一个雷永明也是可以的。OK啊,这样咱们带着大家通过第二种方式创建一个task。然后比如说咱们在这里指定一个任务名。TASK1当B包作为方法的最后一个参数的时候,B包可以写在方法外边。然后。在不引起歧义的情况下。这个小括号也是可以省略的。
02:03
啊,当然啊,这个双引号你也可以啊省略。这样咱们就定义了一个最简单的task,然后在这个task里边,咱们可以定义任务的配置端,就是你直接在这里进行某些操作。比如说我直接让他输出。这是最简单的任务。然后我们还可以在这个币包里边配置任务的行为。常见的任务的行为有do first。还有啊,Do last。然后do first。咱们在这里让他输出TASK1。Do first。Do last,咱们让他输出TASK1 do last。啊,需要给大家提示的是任务的配置段,它是在。
03:02
这个项目生命周期的配置阶段完成。它在配置阶段执行。而任务的行为,它是在项目生命周期的执行阶段执行。好。而且任务的行为常见的有do first和last。通常do first。会在do last。执行之前执行。那接下来咱们就执行一下这个踏给大家看一下。执行一个task,咱们来到含有build点文件的这个跟踪成目录底下,然后在这里执行C。然后跟杠AA表示输出日志的时候啊,输出的是音符及音符级别以上的。
04:01
后边跟任务名就可以了。回城。我们来看一下。首先你会发现他首先是在。初始化阶段,它加载了当前项目下的setting grade文件。这个大家可以结合咱们前面讲的项目的生命周期啊,它会加载setting这轨道文件。然后在配置阶段con product,它加载了每个product的这个build grade文件,比如说先加载了该工程的build gradeid文件,又加载了各个子工程的build文件。它在加载。啊,跟工程的build轨文件的时候,它执行了。任务的配置段啊。当这个生命周期配置阶段执行完毕之后,接着又来到了。
05:01
生命周期的执行阶段。执行阶段它输出了。这个TASK1DO first和TASK1DO last。OK啊,行。这是任务的入门,以及它这里啊几个常见的注意点咱们都提到了,接着我们看一下任务的行为。常见的任务的行为有do last和do first。这两个可以在任务的内部定义,也可以在任务外部定义。比如咱们这里就是在任务内部定义的,其实这两个啊B包你也可以把它定义的。这个任务的外边,比如说我们在这里再定一个针对task一再定一下它的读数的行为。然后在这里让他输出。TASK1DO first outer。然后我们再来。
06:03
定义它的do last。这个行为。表示它是外部输出的。这样也是可以的。此时,我们再来执行一次。然后先执行idle clean。先清空它这灯,或者说清空这个。Build目录,然后再来执行CA,然后这里是跟赖名。OK啊,这一次你会发现在执行阶段他执行了。啊,任务的这四个行为分别是do first out do first do last do last out。OK啊,行,而且你会发现咱们后来添加的这个do first,它是放在任务的最开始执行的,而后来添加的do last,它是放在任务的最后执行的。
07:08
啊,那它到底是一个什么样的执行顺序呢?咱们在这里对任务的底层原理做了一个分析。OK啊,在分析之前,咱们也可以再给他添加一个。一个map,就是当咱们在生命任务的时候,我们可以啊。这么声明。就是使用两个参数的。是吧,我们也可以使用三个参数的。来看这个提示看。按住控制键点进去。是不是咱们可以使用一个参数的也可以啊,使用两个参数的。啊,还可以使用三个参数的,刚才咱们使用的是两个参数的啊,这一次咱们使用这三个参数的,再声明一个任务,比如说我在这里还可以给他传一个map。啊,然后指定任务名,然后指定一个B包来吧,我在这里再给他前面传一个map。
08:03
卖。他如果也需要传一个map的话,诶,我在这里可以把它括起来。啊,他需要一个map,我就给他一个map。这样这个map我就不写了,然后直接复制过来。然后在这里定义一个map,然后把这个map作为第一个参数。在这个map里边。我封装了一个action。啊,这个action对应的值就是一个B包。让他输出一下。他。OK啊,然后这个简单的任务定义好了之后,此时我们再来执行一次,再给大家看一下。先执行g clean。首先我们看一下,这里有一个问题,二十五行。嗯,在这里有一个问题。
09:04
这个需要用双引号引起来。此时,我们再来。Idle clean。然后执行杠A。后边跟任务名TASK1走。同样,这一次还是在啊。这个初始化阶段加载了setting这文件,然后在配置阶段执行了任务的配置段。然后再任务的执行阶段,他执行了任务的这些行为,任务的这些行为,其中有action的啊,有任务自身的行为,还有啊,Do first do last的。咱们添加在最后的do last do last,它是放在最后执行的,添加在最后的do first,它是在一开始执行的。
10:02
然后中间执行的是这些具体的action。那它到底底层到底是怎么执行的,咱们这里做了一个原理解析。咱们给大家解释一下。OK啊,其实就是这个。就是这个任务它本身。啊,底层。这些任务的行为本身底层就是一个action的列表。啊,就这个。就是任务的行为。它在底层本身就是一个action对应的列表,一开始这个列表是空的。当咱们在这里添加了一个map,这个map里边封装了action之后,这个action就表示任务自身的行为。就相当于咱们在列表里边添加了一个任务自身的行为,然后添加任务自身的行为之后咱们在任务里边又定义了do first do的方法。
11:02
每一次我们定义do first方法的时候,它都会在这个action前面。添加啊一个任务的行为。那每一次我们定义。这个do last方法的时候,它都会在action的后边。添加一个任务的行为。在这个action后边添加,你也可以理解成在这个列表的尾部添加。OK啊,这样咱们每次。添加一个do for方法,它都会放在列表的表头。啊。咱们每一次添加一个do last方面,它都会放在列表的表里。所以咱们也先添加了action,又添加了两个do first do last之后,它最终的执行顺序就是这样一个顺序。越在后边添加的do first越是先执行。
12:02
越在后边添加的do last越是在最后执行。你可以看一下。啊,比如说我们在最后添加的do last,它应该是在最后执行的。没有问题。我们在最后添加的first,它是在最先执行的。这里他是最先执行的。啊。中间呢,是这个任务本身的行为task。啊。OK啊,然后是其他的do first,还有啊,Do last。OK啊,这就是任务的底层原理,OK。再一个有一点提示,我看大家如果参考其他的re资料的话,有的时候大家也会发现这种双引号。啊,或者说这个两个向左的箭头。这个它代表的是杜last方法,只不过这个在grid5.s版本已经被废弃掉了啊,已经不再使用了,所以咱们在7.s版本以后就不要那么写了。
13:06
OK啊,这是这个任务。
我来说两句