我正在尝试使用 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.
我不建议这样做。创建您自己的线程,而不是 AsyncTask
。 AsyncTask
专为以毫秒或秒而不是分钟或小时结束的事物而设计。
Is the service getting stopped somehow?
很有可能。使用 adb logcat
、DDMS 或 Eclipse 中的 DDMS 透视图来检查 LogCat 并查看它告诉您的代码什么。
您应该在您的服务中使用 startForeground()
,特别是如果您计划在您的聊天客户端 Activity 不一定在前台时保持服务运行。
关于android - Android 服务中的数据包监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5040852/