Android通用业务弹窗管理方案PopLayerV3- 业务流程控制

前言

自从发布Poplayer以来期间完善了一版以后,已经有一个月没有更新了,期间在写着业务代码的同时涌出许多想法,每一个想法若是衍生出框架,均可以极大的下降平常的工做成本而且帮助理清业务的流程,想法越多要作的事情也愈来愈多,java

在不一样的框架实现中不断游走, 做为程序员,天天除了工做还得保证两个小时的学习时间 其间我的工做也到达了项目冲刺区基本上周六周日也是开干的节奏 ,剩下没有多少时间来为框架添砖加瓦,实在是有点疏忽了,也深深以为维护一个框架或者从头编写一个框架的不易,实在感谢那么多的大佬为开源作的贡献,一块儿共勉git

进入正题 Poplayer第三版的灵感来自于项目中早就发现的一个现象 也感谢以前文章评论留言的同窗提出的这个问题 程序员

如今回想这个需求 对于以前的回复实际上是有些牵强的github

由于咱们没有办法预测多个网络请求结束的公共时间节点(除非定义一个固定的时间点),这个问题在以后也想了一些时间,考虑到须要统筹各个项目的网络框架就不了了之网络

但如今想来 咱们只须要将这个过程理清,统筹逻辑并不必定要适配某某网络框架,给用户提供调度的接口便可再在其上添加主流网络框架的支持 也不失一种解决办法框架

在发布V3以前,Poplayer在我眼里的定义是弹窗的统一管理 包括优先级 显示时间范围 显示倒计时 显示次数等等 但在V3以后它不只是能够统筹弹窗内部属性的框架 它也是能够统筹外部网络通讯的业务逻辑 也能够自定义适合自身业务的弹窗显示逻辑的流程控制框架post

实现思路

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 我会第一时间回复

若是你对往期版本感兴趣 欢迎前往 观看 别忘了点个赞哟!

Android通用业务弹窗管理方案PopLayerV1

Android通用业务弹窗管理方案PopLayerV2

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

相关文章
相关标签/搜索