一、概述
QTaskManager是一个对抽象任务进行调度、分配及管理的简化管理框架,支持并行执行任务、顺序执行任务、按时执行任务、串行执行任务等基本任务操作。
NOTICE:框架是基于Android开发的,但稍加修改可以直接在Java程序中使用(与Android的耦合主要集中在主线程运行部分)。
在框架内,任务被抽象为一个泛型,框架不负责任务的执行细节,只要求调用方提供任务执行能力,并在任务执行开始和结束时通知任务状态即可。
使用QTaskManager做简单的任务调度管理,可以帮我们解决一些比较棘手的细节问题,比如:
- 假设有两个接口请求A和B,都会改变本地的数据缓存,要想保证数据缓存不随接口的返回顺序得到不同的结果,我们需要控制两个接口请求的时机,A执行完成后B再执行,或者B执行后A再执行。这时我们需要一个控制器,控制A/B谁先来谁先执行。
- 再细化一个场景,接口A执行时,接口B在等待A执行,此时用户再次触发了一个接口B的的操作,我们需要取消之前等待执行的接口B的执行。
- 或者,我们需要在300ms后执行接口A,在接口A执行完成后执行接口B,等等……
类似的需求数不胜数,其实抽象来看就是一个简单的任务调度问题,分别是任务A/B的串联执行、并行执行和按时间规划执行。
QTaskManager就是对执行策略的抽象,支持的就是以上几种执行方式。下面我们来看下,这个框架的架构方式与接口。
二、QTaskManager的类设计
- TaskExecutorFactory:框架的对外工厂,可以生成三种任务执行器,分别为:
- 默认的任务执行器(createDefaultTaskExecutor):支持顺序执行、串行执行和按时执行任务;
- 顺序任务执行器(createSequenceTaskExecutor):对所有添加的任务,按添加时指定的顺序执行,不论任务是不是定时任务,或者指定了某个任务必须在另一个任务完成之后执行,只要使用此执行器,所有的任务都顺序执行;
- 串行任务处理器(createSerialTaskExecutor):对所有添加的任务,按添加时指定的顺序一个接着一个执行,同样的,不论任务是不是定时任务,只要使用此执行器,所有的任务都串行执行;
- ITaskExecutor:框架最终创建出来的任务执行器,在任务执行的过程中,我们对此接口进行操作,包括任务执行的配置,开始/结束任务执行,添加/删除任务等。
- ITaskComparator&#x