在服务和活动Android之间保持信使

时间:2014-01-03 04:14:47

标签: java android android-activity android-service

我有一个与Service绑定的活动,并通过MessengerHandler进行通信。当用户点击菜单项时,它会带来一个新的活动,他们可以从ExpandableListView中选择一些内容。选择完成后,我会在该活动上调用finish(),然后返回MainActivityMainActivity在此过程中保持绑定,因为我在其onDestroy()中调用了我的unbind。我将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...
        }
    }
}

我通过Messenger Service Service对象Messagemsg.replyTo = serviceIncomingHandler;注册客户Service Messenger将其发布为MessageHandler以用于客户端。

我看到了使用Message Queue的内容,但是如果我向Messenger类添加了额外的方法,我就失去了从它创建Handler的能力,我不知道如何将客户的传入Service注册到Message,而不向Service发送msg.replyTo并设置Messenger字段。

问题是ExpandableListView ActivityListView启动时获得了GC。我需要这个才能保持活力,因为聊天消息是来回发送的,我希望保留聊天消息的历史记录以重新填充原始ExpandableListView Activity。当Activity恢复时,历史记录仍然在一个数组中,但是当{{1}}是前景时我无法存储正在发送的消息,因为我的Messenger被杀了。

有没有办法让Messenger保持活力,或者比我目前使用的方法更好?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我通过对我的情况实施以下答案来实现这一目标。希望这对其他人也有帮助。 Paused Handler Abstract Class

感谢@quickdrawmcgraw