android - Android 服务中的数据包监听器

标签 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 的正确位置吗?

谢谢

最佳答案

I have created a service, and in the onStart I use a AsyncTask to connect to the chat server, and then sets up a packetlistener.

我不建议这样做。创建您自己的线程,而不是 AsyncTaskAsyncTask 专为以毫秒或秒而不是分钟或小时结束的事物而设计。

Is the service getting stopped somehow?

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

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

关于android - Android 服务中的数据包监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5040852/

相关文章:

java - Android 多 dex 项目设置

android - SQLiteDatabase 插入函数返回 -1

c# - 来自 Service.OnStart 的信号初始化失败

ios - "host connection <NSXPCConnection: 0x538ee0> connection from pid 42 invalidated"适用于 iOS 今日小部件

css - 删除 WP 文本小部件周围的边框

android - 导入 R. (android)

java - Android Studio 中的 ImageButton 问题

Symfony 2 注入(inject)记录器服务

C# 在 Control 的生命周期中 Site (ISite) 不为空?

c++ - 在函数调用时将 GTK 子窗口小部件添加到主窗口