android 清空消息队列,android 首页消息队列

打开应用时,往往会存在许多消息要与用户进行交互,入更新Dialog、权限框、引导蒙层(只在第一次时出现)、提示去实名框(只在第一次出现)……对于这种可能会不定期新增的首页消息,最好的处理方式是将其放入队列中,先入先出,以保证每次只有唯一的消息与用户交互。

这里我选择使用观察者模式+handler+queue的方式进行处理,处理方式如下(按步骤写是我一贯的风格哈):

1、在MainActivity的onCreate中注册观察者 ,(为了避免显得又臭又长,观察者与被观察者类就不贴上来了)

MainQueueDataChange.getInstance().addObserver(watcher);

2、获得需要入队的消息,进行入队 ,若队列为空,直接通知观察者

if (mTipQueue.isEmpty()) {

mTipQueue.offer(SHOWHOMEHELP);

MainQueueDataChange.getInstance().notifyDataChange(mTipQueue);

} else if(!mTipQueue.contains(SHOWHOMEHELP)){

mTipQueue.offer(SHOWHOMEHELP);

}

3、在消息结束之后进行监听,若是Dialog 则在按钮触发时监听,若是popupWindow,则在onDismis时进行监听,如果当前队列队头是是当前处理消息,则出队,并通知观察者。

if (!mTipQueue.isEmpty() && mTipQueue.peek().equals(SHOWHOMEHELP)) {

mTipQueue.poll();

MainQueueDataChange.getInstance().notifyDataChange(null);

}

4、观察者的实现类,获得队头消息(peek,只读不取,在消息队列结束后才出队,如步骤3),发送给handler进行处理。

private MainQueueDataWatcher watcher = new MainQueueDataWatcher() {

@Override

public void update(Observable observable, Object data) {

super.update(observable, data);

//观察者接受到被观察者的通知,来更新自己的数据操作。

Message msg = Message.obtain();

msg.obj = mTipQueue.peek();

msg.setTarget(mHandler);

mHandler.sendMessage(msg);

}

};

5、Handler中对消息进行分发

private Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

String s = mTipQueue.peek();

if (TextUtils.isEmpty(s)) {

return;

}

if (s.equals(SHOWHOMEHELP)) {

//首页蒙层

showHomeHelp();

} else if (s.equals(GRANTPERMISSION)) {//权限框

grantPermission();

} else if (s.equals(HINTTOAUTH)) {

//首页dialog

hintToAuth();

}

}

};

6、最后不要忘记解注册哦

MainQueueDataChange.getInstance().deleteObserver(watcher);

这样首页消息队列就可以有序的出队啦~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值