IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android通用业务弹窗管理方案V3- 业务流程控制 -> 正文阅读

[移动开发]Android通用业务弹窗管理方案V3- 业务流程控制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8F2roFZY-1641136071656)(https://user-gold-cdn.xitu.io/2019/3/23/169aa784503258bf?imageView2/0/w/1280/h/960/ignore-error/1)]

现在回想这个需求 对于之前的回复其实是有些牵强的

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

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

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

实现思路

Android业务中的网络请求方式各种各样 但结果是不变的

可以总结为:成功或失败(需要显示弹窗或者不需要)

所以我们需要定义一个任务类型粒度的对象 它具备基础的优先级属性 根据优先级来控制流程

我们的每一次网络请求可以看成一个Task,它对应着其结果需要显示的弹窗Popi

有了Task当然需要一个管理者去管理业务中繁琐的步骤, TaskManager因此而生其内置了支持保证了在业务流程中 也能使用我们实现的效果 (它包括Dialog,透明Webview等)

由于Task规定了流程的先后顺序 所以在低优先级任务执行成功后显示的弹窗 需要进行预留所以我们需要一个预留弹窗队列保证弹窗显示不会乱序ReServePriorityQueue

最后为了支持主流的回调框架Rxjava在时间和空间上的统筹 增加了其上包含通用逻辑的PopRxSubscriber 用户可以继承进行自定义扩展

流程模拟

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AvU70NuU-1641136071657)(https://user-gold-cdn.xitu.io/2019/3/23/169aab28af7807d5?imageView2/0/w/1280/h/960/ignore-error/1)]

上图是以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);
}
}

优缺点分析

优点:就代码而言 能解决一个接口有多处调用点的问题 弹窗逻辑上的显示由优先级判断,并且解决了网络逻辑业务无法使用弹窗效果的问题

缺点: 摒弃了某些接口的懒加载特性

心得

发布v3之前我也很怀疑 这个问题是否有解决办法 是否需要花费太多的时间 所以一直犹豫要不要在有限的时间来做这个东西,但其实只要将复杂问题分解下 逐个击破其实并没有想象的那么难缠
也很怀疑 这个问题是否有解决办法 是否需要花费太多的时间 所以一直犹豫要不要在有限的时间来做这个东西,但其实只要将复杂问题分解下 逐个击破其实并没有想象的那么难缠

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:32:50  更:2022-01-04 13:35:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:39:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码