项目简介 - xuexiangjys/XTask GitHub Wiki
一个拓展性极强的Android任务执行框架。
可自由定义和组合任务来实现你想要的功能,尤其适用于处理复杂的业务流程,可灵活添加前置任务或者调整执行顺序。例如:应用的启动初始化流程。
特征
- 支持6种线程类型方式执行任务。
- 支持任务链中各任务的执行线程调度和控制。
- 支持快捷任务创建,同时支持自定义任务。
- 支持串行和并行等组任务。
- 支持任务间数据共享。
- 支持自由组合任务执行。
- 支持任务链执行取消。
- 支持取消所有任务链和指定名称的任务链。
- 支持任务链调用顺序记录和查询。
- 支持自定义任务执行的线程池。
组成结构
-
任务链
ITaskChainEngine
:任务链执行引擎,负责统筹调度各任务步骤。 -
任务步骤
ITaskStep
:负责具体任务逻辑处理。 -
数据存储仓库
IDataStore
:存放数据的仓库,主要用于保存任务参数中的数据。 -
任务参数
ITaskParam
:负责任务路径记录以及任务产生的参数管理。 -
任务执行结果
ITaskResult
:存放任务最终执行的结果以及产生的数据。 -
任务组
IGroupTaskStep
:负责统筹调度各子任务步骤。
日志一览
设计原由
在我们平时开发的过程中,一定会遇到复杂业务流程。例如:应用初始化、数据加载展示、购买、鉴权、核心业务等流程。
当我们面对外部业务需求变化,需要调整其中的执行顺序或者输入输出结果时,如果我们还是按照以往的那种callback形式或者RxJava那种数据流形式的处理的话,会发现改起来非常不顺手(1.改动量大 2.业务的前后耦合性太高),当然也会造成很多非常难解的bug。
但是如果我们将这些复杂的业务流程,抽象为一个一个的子业务,每个子业务保证原子性的功能和统一性的输入输出,那么我们在调整业务流程的时候,就无需去过多的关注其他业务的执行状况,每个业务只复杂自己分内之事,这样我们调整业务起来就能更加的游刃有余。
这里我们抽象出来的一个一个的子业务,就是我们创建出来的ITaskStep
,而统一的输入就是ITaskParam
, 统一的输出就是ITaskResult
, 而串联起它们的就是我们的ITaskChainEngine
, 也就是对业务流程的抽象。
设计思想
框架主体使用责任链的设计模式,辅以建造者模式、工厂模式、适配器模式、组合模式、外观模式以及代理模式来实现。