gpt4 book ai didi

android - 为什么 onDestroy 不终止它的方法?

转载 作者:行者123 更新时间:2023-11-29 16:01:33 24 4
gpt4 key购买 nike

我现在正在 Android 上进行 xmpp 聊天。我有下一个情况:1) 我有带有 XMPPConnection 和 2 个 Activity 的单音类。2)第一个 Activity 只是一个联系人列表,我可以选择并开始发送消息。3)在第二个 Activity (聊天)中,我为我的连接设置监听器并添加一些信号,当收到来自特定联系人的消息时播放。4) 然后我关闭聊天 Activity 并调用 onDestroy 方法。5) 然后,如果我向我的应用程序发送消息 - 我听到信号,它在被破坏的 Activity 中播放(我的意思是播放信号的方法必须被聊天 Activity 破坏)。

请解释一下为什么这是可能的。

    public class ChatActivity extends ActionBarActivity {
...
public void beep() {
Uri notification = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
RingtoneManager.getRingtone(getApplicationContext(), notification).play();
}
...

public void setupListeners(XMPPConnection connection) {
if(connection != null) {
//Set a listener for chat messages
connection.addPacketListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null && message.getFrom()
.contains(chatModel.getRecipient())) {
chatModel.addMessage(StringUtils.parseBareAddress(message.getFrom())
+ " :" + message.getBody());
beep();
}
}
}, new MessageTypeFilter(Message.Type.chat));

//Set a listener for normal messages
connection.addPacketListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
Message message = (Message) packet;
if(message.getBody() != null && message.getFrom()
.contains(chatModel.getRecipient())) {
chatModel.addMessage(StringUtils.parseBareAddress(message.getFrom())
+ " :" + message.getBody());
beep();
}
}
}, new MessageTypeFilter(Message.Type.normal));
}
}

最佳答案

您是否尝试过在 Activity 的 onDestroy 中断开连接?或者删除听众?由于这些内部类持有对其外部类的(隐藏)引用 - 在这种情况下是您的 Activity,因此 Activity 可能无法被垃圾收集。因此,删除监听器或断开连接应该可以解决问题。

编辑:正如 Gusdor 所说,您需要在 onPause() 方法中删除监听器并在 onResume() 中再次添加它们。

Edit2:如果您希望 XMPP 连接在后台运行,您应该考虑使用后台服务来处理连接和消息,而不是 Activity 。

关于android - 为什么 onDestroy 不终止它的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24245029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com