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