先簡單說下需求,發一條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之間的回調,等等。圖片