java - 在 Android Service 和 Activity 之间保持 Messenger 的 Activity 状态

标签 java android android-activity android-service

我有一个 Activity,它绑定(bind)到 Service 并通过 MessengerHandler 进行通信。当用户单击菜单项时,它会弹出一个新的 Activity,用户可以在其中从 ExpandableListView 中选择某些内容。做出选择后,我对该 Activity 调用 finish() 并返回 MainActivityMainActivity 在此过程中保持绑定(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 字段。

问题是 MessengerExpandableListView 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/

相关文章:

java - Spring RequestMapping 不工作

android - 从 sqlite 数据库中选择每第 n 个术语,包括第一个

java - 我应该在 OnBindViewHolder() 方法中设置 ReyclerView 项目的 OnClickListener 吗?

android - 我如何让 ExoPlayer 在我的 Activity 的 onStart() 方法中恢复视频?

java - Jcombobox - 订阅 selectedItemChanged 事件

java - 什么是java接口(interface)上的抽象方法

java - LDAP jndi 连接(java + jboss eap 6)

java - 如何以编程方式将 EditText 背景设置为 Holo 主题 Api 11-17 Android 中的默认背景

LAUNCHER Activity 的Android默认launchMode?

android - 为什么在 onActivityResult() 中启动 Activity 时在 onCreate() 之后调用 onStop()