Android服务中的数据包侦听器

时间:2011-02-18 11:42:12

标签: android service widget xmpp

我正在尝试使用XMPP为聊天窗口小部件创建服务,该服务会在发送给用户时收集聊天消息。

我已经创建了一个服务,在onStart中我使用AsyncTask连接到聊天服务器,然后设置一个packetlistener。

以下是打包器监听器的代码:

public void setConnection(XMPPConnection connection) {
    if (connection != null) {
        // Add a packet listener to get messages sent to us
        PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
        connection.addPacketListener(new PacketListener() {
            public void processPacket(Packet packet) {
                Message message = (Message) packet;
                if (message.getBody() != null) {
                    String fromName = StringUtils.parseBareAddress(message
                            .getFrom());
                    Log.v(TAG, "Got:" + message.getBody());
                    // messages.add(fromName + ":");
                    // messages.add(message.getBody());

                }
            }
        }, filter);
    }
}

问题是它在闲置一段时间后似乎停止了听。如果我立即发送聊天消息,他们会得到输出。

服务是否以某种方式停止了?这是放置packerlistener的正确位置吗?

由于

1 个答案:

答案 0 :(得分:1)

  

我已经创建了一个服务,在onStart中我使用AsyncTask连接到聊天服务器,然后设置一个packetlistener。

我不推荐。创建自己的主题,而不是AsyncTaskAsyncTask适用于以毫秒或秒(而非分钟或小时)结束的内容。

  

服务是否以某种方式停止了?

很可能。在Eclipse中使用adb logcat,DDMS或DDMS透视图来检查LogCat并查看它告诉您的代码。

您应该在服务中使用startForeground(),特别是如果您计划在聊天客户端活动不一定在前台时保持服务正常运行。