【发布时间】:2010-06-25 08:58:21
【问题描述】:
我的应用程序中目前有一个服务和一个活动。
我目前不使用 AIDL 将 Service 绑定到 Activity,因为 Service 和 Activity 在同一个应用程序中。
这允许我在需要时从我的 Activity 中调用服务中的方法,但是它不允许我在需要时从我的服务中调用 Activity 的方法。
谁能评论实现这一目标的最佳方法是什么?
我可以使用 Intents,但有其他选择吗?
我希望 Service 和 Activity 之间有紧密的通信,我希望能够在事件发生时从我的 Service 调用 Activity 方法。
感谢 ognian 的出色建议。
编辑 2:
我现在可以按照我想要的方式运行它,但是我遇到了一个问题。
我的服务获取状态更新,然后我的 Activity 应该对从服务发送的更新做出反应。
问题是,当我开始我的活动时,我在调用 onBind 之前获得了拨号状态,然后是连接状态,我获得了 iCallDialogActivity 的实例。
logcat 的以下输出可能会让事情更清楚。
06-28 10:56:48.702: DEBUG/TestPhone(3498): Status: EStatusDialling
06-28 10:56:48.751: DEBUG/TestPhone(3498): Status: EStatusConnected
06-28 10:56:49.122: DEBUG/TestPhone(3498): Status: onBind Called <-------------
06-28 10:56:49.141: DEBUG/TestPhone(3498): Status: iCallDialogActivity instance <-------------
06-28 10:56:51.641: DEBUG/TestPhone(3498): Status: EStatusDisconnecting
06-28 10:56:51.651: DEBUG/TestPhone(3498): Status: EStatusIdle
当我收到拨号和连接状态通知时,我需要能够使用我的 iCallDialogActivity。
但这给了我一个 NullPointer 异常,因为它没有在我的 Activity 启动时及时创建,绑定是我在我的 Activity onCreate() 中做的第一件事。
有没有办法让它直接绑定?
【问题讨论】:
-
在您的服务代码中,方法“public void setCallback(ICallDialogActivity callDialogActivity)”必须实际设置对回调的服务全局引用。然后您可以在服务中需要它的地方使用它。此外,您需要添加 removeCallback() 方法,您将在 Activity 的 onDestroy() 中调用该方法,否则 Service 可能最终会调用死 Activity。你应该仔细设计这个,因为 Service 和 Activity 有完全不同的生命周期
-
感谢ognian,我已经实现了它,现在我已经掌握了我必须做的事情,但是我遇到了另一个问题并相应地编辑了我的帖子,你对我的新问题有什么见解吗?
标签: android service android-activity communication