背景
由于活动业务越来越多,积累的弹窗越来越多和杂乱,出现如下弹窗交互问题:
-
弹窗无限重叠,影响操作
-
弹出顺序无优先级,重要弹窗被隐藏
原因相信大家都一样,产品是一次次迭代的,也可能是不同人开发的,两个毫不相关的业务,弹窗时机也没有任何关联,重不重叠我怎么控制呀
首先来分析一下我们的预期
经过总结后,我想要的弹窗效果如下:
- 短时间内弹出多个弹窗情况下,一次只能显示一个,其他的都加到队列里等待;
- 下一个弹窗弹出的时机,是在当前弹窗关闭之后;
- 队列中的弹窗不是无限等待的,超时后不能显示(出队列的时间-入队列的时间,超时时间可设置)
- 队列中的弹窗显示按照优先级排列(可设置优先级)
当然,除了满足上面的业务条件外,对当前代码的侵入性,代码可靠性也同样重要,不然改了一顿之后上线都是bug,那这个就得不偿失了;
设计阶段
为了后续开发清晰,我总结了一个流程图
设计DialogManager类:
定义需要的结构
object DialogShowManager {
//弹窗等待队列
private val