我有一个 Activity,它绑定(bind)到 Service
并通过 Messenger
和 Handler
进行通信。当用户单击菜单项时,它会弹出一个新的 Activity,用户可以在其中从 ExpandableListView
中选择某些内容。做出选择后,我对该 Activity 调用 finish()
并返回 MainActivity
。 MainActivity
在此过程中保持绑定(bind)状态,因为我在其 onDestroy()
中调用了取消绑定(bind)。我将我的 Service
交给了客户端传入的 Handler
。这是我创建的一个 Messenger
:
//Target to allow service to send message to InccomingHandler
final Messenger serviceIncomingHandler = new Messenger(new MessageHandler(this));
/**
* Message Handling from Service
*/
private static class MessageHandler extends Handler {
private final WeakReference<RoomListActivity> mTarget;
public MessageHandler(RoomListActivity target) {
mTarget = new WeakReference<RoomListActivity>(target);
}
@Override
public void handleMessage(Message msg) {
RoomListActivity target = mTarget.get();
switch (msg.what) {
//Fancy stuff here...
}
}
}
我通过使用 向
在 Service
发送 Message
对象来向 Service
注册客户端的 Messenger
msg.replyTo = serviceIncomingHandler;Service
端,我将其发布为 Messenger
以供客户端使用。
我看到一些使用消息队列的地方,但是如果我向我的 MessageHandler
类添加额外的方法,我就失去了从中创建 Messenger
的能力,并且我不知道如何将客户端的传入Handler
注册到Service
而不向Service
发送Message
并且设置 msg.replyTo
字段。
问题是 Messenger
在 ExpandableListView Activity
启动时被 GC 处理。我需要它来保持 Activity 状态,因为聊天消息正在来回发送,并且我想保留聊天消息的历史记录以重新填充原始 ListView
。当 Activity 恢复时,历史记录仍在数组中,但我无法存储在 ExpandableListView Activity
处于前台时发送的消息,因为我的 Messenger 被终止。
有没有办法让 Messenger 保持活力,或者比我目前使用的方法更好?
预先感谢您的帮助!
最佳答案
我通过对我的情况实现以下答案来实现此目的。希望这也能帮助其他人。 Paused Handler Abstract Class
感谢@quickdrawmcgraw
关于java - 在 Android Service 和 Activity 之间保持 Messenger 的 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20896438/