先简单说下需求,发一条WB包含多种类型,例如图片、视频、文字等,发送工作不能阻塞UI,工作队列易于扩展,方便优化。
几个重要的类:
JobManager:统一管理Job列表,包括job的添加、启动、终止等等;
Job:具体工作类的基类,一个Job对应多个Operatoin,除了维护每个Operation,还管理着自己的各种状态;
Operation<Result>:该类实现了RunnableFuture和Callable,是真正执行操作任务的基类,为了易于扩展,将返回类型设计为泛型。Operation之间可以相互依赖,当A依赖B时,B任务执行完A才会开始执行;
OperationExecutor:继承自ThreadPollExecutor,是执行Operation的线程容器。
下面是结构图:
熟悉类之间的结构后,下面是一个典型调用过程的流程图:
结构大致就是这样,总结一下,首先将Job细分成多个Operation,能够增加Operation的复用性,并且每个类型的Operation运行在独立线程,而Job只负责对不同Operation的组合方式,使框架更加容易扩展。缺点也比较明显,层次太多,增加回调通知的复杂度(各种Listener),比如Operation之间的回调通知,Operation与Job之间的回调,等等。