前言
自從釋出Poplayer以來期間完善了一版之後,已經有一個月沒有更新了,期間在寫著業務程式碼的同時湧出許多想法,每個想法如果衍生出框架,都可以極大的降低日常的工作成本並且幫助理清業務的流程,想法越多要做的事情也越來越多,
在不同的框架實現中不斷遊走, 作為程式設計師,每天除了工作還得保證兩個小時的學習時間 其間個人工作也到達了專案衝刺區基本上週六週日也是開乾的節奏 ,剩下沒有多少時間來為框架添磚加瓦,實在是有點疏忽了,也深深覺得維護一個框架或者從頭編寫一個框架的不易,實在感謝那麼多的大佬為開源做的貢獻,一起共勉
進入正題 Poplayer第三版的靈感來自於專案中早就發現的一個現象 也感謝之前文章評論留言的同學提出的這個問題
現在回想這個需求 對於之前的回覆其實是有些牽強的
因為我們沒有辦法預測多個網路請求結束的公共時間節點(除非定義一個固定的時間點),這個問題在之後也想了一些時間,考慮到需要統籌各個專案的網路框架就不了了之
但現在想來 我們只需要將這個過程理清,統籌邏輯並不一定要適配某某網路框架,給使用者提供排程的介面即可再在其上新增主流網路框架的支援 也不失一種解決辦法
在釋出V3之前,Poplayer在我眼裡的定義是彈窗的統一管理 包括優先順序 顯示時間範圍 顯示倒數計時 顯示次數等等 但在V3之後它不僅是可以統籌彈窗內部屬性的框架 它也是可以統籌外部網路通訊的業務邏輯 也可以自定義適合自身業務的彈窗顯示邏輯的流程控制框架
實現思路
Android業務中的網路請求方式各種各樣 但結果是不變的
可以總結為:成功或失敗(需要顯示彈窗或者不需要)
所以我們需要定義一個任務型別粒度的物件 它具備基礎的優先順序屬性 根據優先順序來控制流程
我們的每一次網路請求可以看成一個Task,它對應著其結果需要顯示的彈窗Popi
有了Task當然需要一個管理者去管理業務中繁瑣的步驟, TaskManager因此而生其內建了Poplayer的支援保證了在業務流程中 也能使用我們的Poplayer實現的效果 (它包括Dialog,透明Webview等)
由於Task規定了流程的先後順序 所以在低優先順序任務執行成功後顯示的彈窗 需要進行預留所以我們需要一個預留彈窗佇列保證彈窗顯示不會亂序ReServePriorityQueue
最後為了支援主流的回撥框架Rxjava在時間和空間上的統籌 增加了其上包含通用邏輯的PopRxSubscriber 使用者可以繼承進行自定義擴充套件
流程模擬
上圖是以APP開發中最常見的版本更新和公告彈窗的資料互動與顯示流程為例的邏輯圖
它分為兩個部分 分別是引入流程控制前後的邏輯順序我們可以清晰的發現兩者的區別
通常流程下我們必須在每個流程的中介點進行資料產出和UI生成的操作 在框架的幫助下 我們只需要考慮產生UI 具體的邏輯由事先訂好的規則由工作管理員幫我們處理
具體使用
基礎使用
//建立網路請求任務
Task taskUpdate=new Task();
//新建Poplayer彈窗
PopLayerView mLayerView1 = new PopLayerView(this,LayerConfig.dialog5);
Popi downloadPop = new Popi.Builder()
.setmPopId(30)
.setmPriority(6)
.setmCancelType(TRIGGER_CANCEL)
.setLayerView(mLayerView1)
.build();
//加入任務管理
TaskManager.getInstance(this).pushToQueue(taskUpdate,mUpgradePopi)
複製程式碼
自定義回撥
TaskManager.getInstance(this).onTaskGoOn(taskNotice);//回撥成功
TaskManager.getInstance(this).onTaskInterupt(taskUpdate);//回撥失敗
複製程式碼
如果您使用的是Rxjava實現回撥可以繼承框架中自帶回撥邏輯的PopRxSubscriber
public class MySubscriber extends PopRxSubscriber {
public MySubscriber(Context mContext, Task task) {
super(mContext, task);
}
}
複製程式碼
優缺點分析
優點:就程式碼而言 能解決一個介面有多處呼叫點的問題 彈窗邏輯上的顯示由優先順序判斷,並且解決了網路邏輯業務無法使用Poplayer彈窗效果的問題
缺點: 摒棄了某些介面的懶載入特性
心得
釋出v3之前我也很懷疑 這個問題是否有解決辦法 是否需要花費太多的時間 所以一直猶豫要不要在有限的時間來做這個東西,但其實只要將複雜問題分解下 逐個擊破其實並沒有想象的那麼難纏
第一步 將其中涉及的關鍵成員都整理起來 闡明對應的職責 用程式碼實現出一個大概
第二步 將複雜的問題 最小化具象化 將邏輯寫下來 根據邏輯和成員類寫測試程式碼
第三步 考慮N+1種可能 將簡單問題進行N種可能的適用化 並逐步用在小範圍的業務程式碼上
關於專案
POPLAYER
Android通用彈窗管理框架,支援網路回撥業務邏輯彈窗,內部維護彈窗優先順序佇列 具備彈窗管理擴充套件功能 整合Dialog,PoupoWindow,懸浮Widget,透明Webview,Toast,SnackBar,無需再為繁瑣的業務彈窗邏輯所困擾
具體如何使用 可以去github.com/MrCodeSnipe…閱讀下面的使用說明文件
您也可以下載Demo體驗一番 如有問題 可以在Github上開啟Issue 我會第一時間回覆
如果你對往期版本感興趣 歡迎前往 觀看 別忘了點個贊喲!
V1方案
版本號 | LOG | 進度更新 |
---|---|---|
V1.0.0 | 專案開源,完成彈窗管理與Dialog形式擴充套件 | Dialog策略擴充套件完成 |
V1.0.1 | 修復Dialog策略無法獲取dialog實體bug | Dialog策略優化 |
V1.0.2 | 修復activity摧毀造成的彈窗異常 bug | Dialog策略優化 |
V1.0.3 | 優化了彈窗的使用更加方便快捷 | 框架使用優化 |
V2方案
版本號 | LOG | 進度更新 |
---|---|---|
V2.0.0 | 正式加入透明Webview彈窗策略擴充套件 | 透明Webview策略擴充套件完成 |
V3方案
版本號 | LOG | 進度更新 |
---|---|---|
V3.0.0 | 引入流程任務管理模組 | 解決涉及網路的業務邏輯彈窗 |
關於我
Hello 我叫lalala,如果您喜歡我的文章,可以去我的Github給個Star我就很開心啦!!!
Github:github.com/MrCodeSnipe…
--End