Handler暂停接收Message的实现
来源:互联网 发布:ecshop sql语句 编辑:程序博客网 时间:2024/06/18 12:18
Handler暂停接收Message的实现
最近在做即时通信软件实现一个聊天的小功能,遇到了一个小问题:好友列表界面不在前台时如何更新。因为有好友上下线或者好友发来消息时需要更新好友列表界面,如果好友列表界面处于可交互状态比较好说,直接用handler更新界面即可,但是毕竟是通信软件,在和好友聊天时其他好友上下线或者发来消息是难免的,但是这时会有个问题,就是当前好友列表处于不可交互状态,不能直接更新,后来在论坛看见一个方法,记录一下。
大体思路是:当Activity调用onPause()时,将需要处理的message 暂存 一下,当Activity调用onResume()恢复时,将暂存的消息取出,重新发送给handler执行操作。
下面是实现暂存功能的Handler类:
public abstract class PauseHandler extends Handler { /** * 储存还未处理的消息 */ final Vector<Message> messageQueueBuffer = new Vector<Message>(); /** * 标志位,记录创建handler的控件是否可操作 */ private boolean paused; /** * 恢复,重新发送临时储存的消息 */ final public void resume() { paused = false; while (messageQueueBuffer.size() > 0) { final Message msg = messageQueueBuffer.elementAt(0); messageQueueBuffer.removeElementAt(0); sendMessage(msg); } } /** * 暂停操作 */ final public void pause() { paused = true; } /** *通知消息即将被保存为活动暂停。如果没有处理,当活动恢复时,消息将被保存并重播。 * * @param message 需要储存的消息 * @return 消息是否储存成功 */ protected abstract boolean storeMessage(Message message); /** * 对需要处理的消息执行相应的操作 * * @param message 需要执行的消息 */ protected abstract void processMessage(Message message); /** {@inheritDoc} */ @Override final public void handleMessage(Message msg) { if (paused) { if (storeMessage(msg)) { Message msgCopy = new Message(); msgCopy.copyFrom(msg); messageQueueBuffer.add(msgCopy); } } else { processMessage(msg); } }}
阅读全文
1 0
- Handler暂停接收Message的实现
- Android Handler Message 在使用多个Handler时,接收不到消息的处理办法
- Handler的实现原理及其与Message、MessageQueue关系详解
- Android的Message机制---Handler、Message、Looper
- Handler对象的Message应用
- Handler,Message,Looper的关系
- Handler、Looper、Message的理解
- Handler、Message的简单使用
- Loop,Handler,Message的机制
- Handler和ProgressBar实现进度条的开始,暂停,停止,后退和循环
- Handler和ProgressBar实现进度条的开始,暂停,停止,后退和循环
- Handler由浅入深(二)--Handler的实现原理以及Looper、Handler、Message三者之间的关系
- android中handler,message,message queue,looper底层实现机制
- Handler Message
- Message、Handler
- handler+message
- Message、Handler、Message Queue、Looper之间的关系
- Message、Handler、Message Queue、Looper之间的关系
- redis数据结构
- PHP window 服务器下实现 自动解压文件
- Java MySQL数据库备份和还原
- 机器学习|最小二乘法的概率解释
- 剩余类、完系及简系
- Handler暂停接收Message的实现
- 数据库常用操作
- HDU4496 D-City(并查集逆向思维)
- 2016-2017大三下学期末
- base64
- ARM NEON 基本指令集介绍
- 互联网公司的“敏捷开发”流程是怎么样的,每个职位的角色和分工是什么?
- 位置式和增量式PID控制 .
- 81-85.c++个人练习。