我目前在我的应用程序中有一项服务和一项活动。Android获得服务与活动进行通信?
我当前将服务绑定到活动而不使用AIDL,因为服务和活动位于同一应用程序中。
这使我可以在需要时从我的Activity中调用服务中的方法,但它不会让我在需要时从我的Service中调用Activity的方法。
任何人都可以评论什么是最好的方式来实现这一目标?
我可以使用Intents,但有没有其他选择?
我希望在服务和活动之间有紧密的沟通,我希望能够在事件发生时从我的服务中调用活动方法。
感谢爱尔兰人的出色建议。
编辑2:
我现在有工作的方式我想,但是我所遇到的一个问题。
我的服务获取状态更新,然后我的活动应该对从服务发送的更新作出反应。
问题是,当我开始我的活动时,我得到拨号状态,然后连接状态之前,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)'实际上必须设置服务全局引用到回调。然后,您可以在Service中需要的地方使用它。此外,您需要添加removeCallback()方法,您将在Activity的onDestroy()中调用该方法,否则Service可能会最终调用Dead Activity。你应该仔细设计这个,因为服务和活动有完全不同的生命周期 – ognian 2010-06-25 17:21:34
感谢ognian,我已经实现了它,现在我已经掌握了我必须做的事情,但是我遇到了另一个问题并相应地编辑了我的帖子,你对我的新问题有什么看法? – 2010-06-28 10:08:00