Android知识Android开发Android技术知识

Smack开发总结 (五)处理Packet的两种方式

2017-01-03  本文已影响875人  DevSiven

《Smack开发总结 (五)处理Packet的两种方式》
转载请注明来自 傻小孩b_移动开发http://www.jianshu.com/users/d388bcf9c4d3)喜欢的可以关注我,不定期总结文章!您的支持是我的动力哈!

在Smack中,Packet是作为一个消息的载体。在心跳包、IQ包、特殊消息格式应用中相当广泛。这里还需要注意的一点,在Smack 4.1版本之后,Packet的所有入口,都被标记为@Deprecated。反之取而代之是stanza

接下来是正文

处理Packet的两种方式

Smack中提供了两种方式处理收到的packet

从源码解释,可以了解到。StanzaListener用于事件样式的变成,而PacketCollector手机去可以作为一个做轮询和阻塞操作的结果队列。因此,如果想直接对到来的Stanza,例如心跳包,可以使用StanzaListener监听器;而当我们想等待一个特殊的packet到来的时候,例如指定类型的推送,可以使用PacketCollector收集器。

在涉及到这两个入口的初始化的时候,这里也需要讲到一个机制--过滤器Filter

(一)举例收集器和监听器的实例化
// Create a packet filter to listen for new messages from a particular
// user. We use an AndFilter to combine two other filters._
StanzaFilter filter = new AndFilter(new StanzaTypeFilter(Message.class),
        new FromContainsFilter("mary@jivesoftware.com"));
// Assume we've created an XMPPConnection name "connection".

// First, register a packet collector using the filter we created.
PacketCollector myCollector = connection.createPacketCollector(filter);
// Normally, you'd do something with the collector, like wait for new packets.

// Next, create a packet listener. We use an anonymous inner class for brevity.
PacketListener myListener = new PacketListener() {
        **public** **void** processPacket(Packet packet) {
            // Do something with the incoming packet here._
        }
    };
// Register the listener._
connection.addPacketListener(myListener, filter);
(二)标准过滤

Smack中有很多已经定义的过滤器集,如果需要自己自定义的话,就实现StanzaFilter创建自己的过滤器,默认有如下过滤器:

有兴趣的可以一起交流哈

傻小孩b mark共勉,写给在成长路上奋斗的你

上一篇 下一篇

猜你喜欢

热点阅读