【问题标题】:Keeping Messenger Alive between Service and Activity Android在服务和活动 Android 之间保持 Messenger 活跃
【发布时间】:2014-01-03 04:14:47
【问题描述】:

我有一个绑定到Service 并通过Messengers 和Handlers 进行通信的活动。当用户点击一个菜单项时,它会带来一个新的活动,他们可以从ExpandableListView 中选择一些东西。做出选择后,我在该 Activity 上调用 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...
        }
    }
}

我通过发送Servicemsg.replyTo = serviceIncomingHandler;Service 注册客户的Messenger 对象msg.replyTo = serviceIncomingHandler;Service 方面,我将其发布为Messenger 以供客户使用.

我看到了一些使用消息队列的东西,但是如果我向我的 MessageHandler 类添加额外的方法,我失去了从中创建 Messenger 的能力,而且我不知道如何注册客户的传入HandlerService 而不发送 MessageService 并设置 msg.replyTo 字段。

问题是MessengerExpandableListView Activity 启动时被GC'd。我需要这个来保持活力,因为聊天消息被来回发送,我想保留聊天消息的历史记录以重新填充原始ListView。当 Activity 恢复时,历史仍然在一个数组中,但是我无法存储在 ExpandableListView Activity 是前台时正在发送的消息,因为我的 Messenger 被杀死了。

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

提前感谢您的帮助!

【问题讨论】:

  • 为什么MessengerListViewActivity 启动时会被GC'd?你不是在某处保留对这个对象的引用吗?这听起来不对。
  • @DavidWasser 因为ListViewActivity 是一个新的Activity,我假设?如果队列中没有任何消息,并且启动了一个新的Activity,我猜虚拟机说我们已经完成了那个分配......?
  • 你将Messenger的引用保存在哪里?在哪个活动中?

标签: java android android-activity android-service


【解决方案1】:

我已经通过对我的情况实施以下答案来解决这个问题。希望这也能帮助其他一些人。 Paused Handler Abstract Class

感谢@quickdrawmcgraw

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2013-04-10
    • 2013-05-10
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多