美文网首页
Android启动弹窗

Android启动弹窗

作者: Jay简爱 | 来源:发表于2020-03-09 16:46 被阅读0次

前言

  • 相信很多朋友都曾接到过App启动进行弹窗的需求,或广告或引导,加上现在管控力度的提升,App被要求加入个人信息隐私弹窗和青少年模式弹窗的越来越多,导致一大堆弹窗堵在了App启动时,这个时候我们就需要列好优先级,再结合业务场景进行展示。


    示意图1.jpg
示意图2.jpg 示意图3.jpg

1. 确定方案

  • 首先App启动时弹窗过多会造成一定的用户流失,所以我们只把必须的弹窗放在启动时,其他的尽量延后,然后按照优先级逐一展示
  • 弹窗我建议使用DialogFragment,方便生命周期管理,可以按照App风格封装一个通用弹窗
  • 既然弹窗是逐一进行展示,我们不禁想到的数据结构就是队列,这里我们使用ArrayDeque

2. 实践

public abstract class BaseStartupPop {
    private boolean once = true; // 这里用来判断是否每次都要检查
    protected abstract void doShow();
    protected void finish() {
    if (hasNext()) {
      next().show();
    }
  }
}

先把公用方法放到一个基础类里

public class InfoProtectStartupPop extends BaseStartupPop {
    @Override protected void doShow() {
        if(xxx) {
           showDialog();
        } else {
          finish();
        }
    }
}

拿个人信息保护弹窗举例,我们在doShow方法里判断弹窗的条件,条件满足则展示,不满足则finish进行下一步,当然弹窗dismiss后别忘了也要调用finish进行下一步,然后我们需要一个管理类来管理这个队列

public class StartupPopManager {
    private Queue<StartupPop> queue;

    public void addPop(Queue<StartupPop> queue) {
      this.queue = queue;
    }
    public void start() {
      if(queue.isEmpty()) return;
      next().show();
    }

    public StartupPop next() {
      return queue.poll();
    }
}

最后我们只需要在初始化的时候将所有StartupPop添加到队列里,然后调用start方法即可

private Queue<StartupPop> queue = new ArrayDeque<>();
queue.offer(new InfoProtectStartupPop());
***
***
StartupPopManager.getInstance().addPop(queue);
StartupPopManager.getInstance().start();

总结

其实这种业务需求有很多种做法,这只是其中的一种,通过一个队列来逐个进行实现,更方便管理,代码更加的简洁易懂。

相关文章

网友评论

      本文标题:Android启动弹窗

      本文链接:https://www.haomeiwen.com/subject/maspdhtx.html